mitsukarenai / Projet-Autoblog

Création, gestion et échange d'autoblogs (version 0.3)
Creative Commons Zero v1.0 Universal
48 stars 16 forks source link

Liens média erronés #2

Closed ghost closed 11 years ago

ghost commented 11 years ago

Bonjour! Pour ma config, je préfère préciser: nginx, php-fpm chrooté avec juste ce qu'il faut pour faire fonctionner curl, et allow_url_fopen=1.

Le soucis, c'est qu'une fois un autoblog créé, par exemple celui de Reflets.info, on a: http://autoblog.br4ndon.eu/b0b151623d660b48d845d954b49ae0f3e0e4eb16/ Avec des liens médias qui pointent vers: http://autoblog.br4ndon.eu/9ae0f3e0e4eb16/ Avec par exemple: http://autoblog.br4ndon.eu/9ae0f3e0e4eb16/media/c366952c.tpams.png Qui se trouve en fait à: http://autoblog.br4ndon.eu/b0b151623d660b48d845d954b49ae0f3e0e4eb16/media/c366952c.tpams.png

Faire: ln -s b0b151623d660b48d845d954b49ae0f3e0e4eb16/ 9ae0f3e0e4eb16/ Résout le problème, mais ça reste un truc à régler :)

ArthurHoaro commented 11 years ago

A chaque fois, le lien des médias est tronqué avec les 14 derniers caractères du hash du nom de dossier. Tu utilises quelle version de PHP ?

ghost commented 11 years ago

root@darkstar:~# php -v PHP 5.4.12 (cli) (built: Mar 2 2013 16:06:40)

Pour le coup, les logs ne disent que l'évident (le chemin local est bon, c'est chrooté): 2013/03/17 17:16:29 [error] 1474#0: *1649 open() "/autoblog/d39f9b89d480ff/media/9fa4ca7c.flattr-aryo.png" failed (2: No such file or directory), client: 87.91.126.27, server: autoblog.br4ndon.eu, request: "GET /d39f9b89d480ff/media/9fa4ca7c.flattr-aryo.png HTTP/1.1", host: "autoblog.br4ndon.eu", referrer: "http://autoblog.br4ndon.eu/5ef4be1f3f5b93bf5022ddb771d39f9b89d480ff/?2

ArthurHoaro commented 11 years ago

Bon ce commit devrait résoudre ton problème : https://github.com/mitsukarenai/Projet-Autoblog/commit/b5cdbebfa3769df2b82a5242090f96f5245af081 (il faut tout recréer par contre).

Le chemin vers les images était relatif, je ne sais pas pourquoi le nom de dossier se retrouvait tronqué chez toi. C'est peut être lié à nginx...

Tiens nous au courant.

ghost commented 11 years ago

Merci pour le commit! Je le teste de suite.

Fait! Alors en rehaussant le niveau d'affichage des logs, on remarque en fait l'erreur suivante qui s'affiche en bas de page à l'ajout d'un autoblog: Error happened ! 0 - SQLite3::exec(): database is locked In: /chemin/autoblog.php:288 http://autoblog.br4ndon.eu/b0b151623d660b48d845d954b49ae0f3e0e4eb16/ #0 [internal function]: exception_error_handler(2, 'SQLite3::exec()...', '/root/autoblog....', 288, Array) #1 /chemin/autoblog.php(288): SQLite3->exec('INSERT INTO art...') #2 /chemin/autoblog.php(413): VroumVroum_Blog->insertOrUpdateArticle('http://reflets....', 'Chypre : l???Eu...', 'http://reflets....', 1363603746, '

Conf nginx:

server { listen 80; server_name autoblog.br4ndon.eu; server_name_in_redirect off;

    access_log /var/log/autoblog.log;
    error_log /var/log/autoblog.log;

    root /chemin/autoblog/;
    index index.php;
    location / {
           try_files $uri $uri/ /index.php?q=$uri&$args =404;
    }

    # deny running scripts inside writable directories
    location ~* /(images|cache|media|logs|tmp)/.*\.(php|pl|py|jsp|asp|sh|cgi)$ {
            return 403;
            error_page 403 /403_error.html;
    }

    location ~ \.php$ {
     fastcgi_pass unix:/var/run/php-fpm/autoblog.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME /chemin$fastcgi_script_name;
    }

    # caching of files 
    location ~* \.(ico|pdf|flv)$ {
            expires 1y;
    }

    location ~* \.(js|css|png|jpg|jpeg|gif|swf|xml|txt)$ {
            expires 14d;
    }

include drop;

location ~* \.(png|gif|jpg|jpeg|swf|ico)(\?[0-9]+)?$ {
valid_referers none blocked autoblog.br4ndon.eu;
if ($invalid_referer) {
    return 403;
}
}

}


Un rafraîchissement plus tard, j'ai toujours la page bloquée sur: "Mise à jour Mise à jour de la base de données, veuillez patienter..." Mais avec un nouveau message d'erreur:

Error happened ! 0 - Undefined index: path In: /chemin/autoblog.php:519 http://autoblog.br4ndon.eu/b0b151623d660b48d845d954b49ae0f3e0e4eb16/ #0 /root/autoblog.php(519): exception_error_handler(8, 'Undefined index...', '/chemin/autoblog....', 519, Array) #1 /chemin/autoblog.php(283): VroumVroum_Blog->mirrorMediasForArticle('

update() #4 /chemin/b0b151623d660b48d845d954b49ae0f3e0e4eb16/index.php(1): require_once('/chemin/autoblog....') #5 {main}

mitsukarenai commented 11 years ago

exec(): database is locked: houh je déteste ça ^^ Regarde voir dans le dossier, il s'y trouverait un fichier "journal" (peut-être caché) qu'il faut supprimer pour libérer la base. Au besoin, le correctif c'est greffer un busyTimeout à la requête SQLite.

Le second message d'erreur renvoie plutôt à un souci avec parse_url(). Mmmmh. Après "$url = parse_url($m[2]);", peux-tu ajouter un petit "var_dump($url);" ?

ghost commented 11 years ago

Désolé pour la réponse tardive ^^

Il y a bien un fichier articles.db-journal qui apparaît lors de la création d'un autoblog. Le supprimer n'a pas d'effet!

J'ai recréé une instance d'autoblog avec la dernière version git, et ces erreurs n'apparaissent en fiat que durant la mise à jour d'un autoblog. En attendant un peu, l'autoblog s'affiche: http://autoblog.br4ndon.eu/b0b151623d660b48d845d954b49ae0f3e0e4eb16/ Mais toujours avec le même problème de liens médias. Remarque: les liens rss et opml en bas de page sont justes, mais pas les liens de conf (vvb.ini) et de la bdd (articles.db).

Edit: J'ai mis en place ta seconde instruction :) Voici ce que ça donne juste après avoir ajouté l'autoblog de reflets sur une instance toute neuve:

"Mise à jour Mise à jour de la base de données, veuillez patienter..."

array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(45) "/wp-content/uploads/2013/03/charia-laique.jpg" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(45) "/wp-content/uploads/2013/03/charia-laique.jpg" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(53) "/wp-content/plugins/flattr/img/flattr-badge-large.png" } Error happened ! 0 - SQLite3::exec(): database is locked In: /root/autoblog.php:288 http://autoblog.br4ndon.eu/b0b151623d660b48d845d954b49ae0f3e0e4eb16/ #0 [internal function]: exception_error_handler(2, 'SQLite3::exec()...', '/root/autoblog....', 288, Array) #1 /root/autoblog.php(288): SQLite3->exec('INSERT INTO art...') #2 /root/autoblog.php(413): VroumVroum_Blog->insertOrUpdateArticle('http://reflets....', 'La charia la??q...', 'http://reflets....', 1364551025, '

(En l&rs...') #3 /root/autoblog.php(850): VroumVroum_Blog->update() #4 /root/b0b151623d660b48d845d954b49ae0f3e0e4eb16/index.php(1): require_once('/root/autoblog....') #5 {main}

Re-edit: après rafraichissement

Mise à jour Mise à jour terminée ! Cliquez ici pour recharger cette page.

array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(45) "/wp-content/uploads/2013/03/charia-laique.jpg" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(45) "/wp-content/uploads/2013/03/charia-laique.jpg" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(53) "/wp-content/plugins/flattr/img/flattr-badge-large.png" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(38) "/wp-content/uploads/2013/03/chypre.jpg" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(38) "/wp-content/uploads/2013/03/chypre.jpg" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(39) "/wp-content/uploads/2013/03/bomarzo.jpg" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(39) "/wp-content/uploads/2013/03/bomarzo.jpg" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(44) "/wp-content/uploads/2013/03/bar_des_amis.png" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(44) "/wp-content/uploads/2013/03/bar_des_amis.png" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(53) "/wp-content/plugins/flattr/img/flattr-badge-large.png" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(39) "/wp-content/uploads/2013/03/uta-772.jpg" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(39) "/wp-content/uploads/2013/03/uta-772.jpg" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(49) "/wp-content/uploads/2013/03/Abdallah-Senoussi.jpg" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(49) "/wp-content/uploads/2013/03/Abdallah-Senoussi.jpg" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(53) "/wp-content/plugins/flattr/img/flattr-badge-large.png" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(50) "/wp-content/uploads/2013/03/BankruptSpedometer.jpg" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(50) "/wp-content/uploads/2013/03/BankruptSpedometer.jpg" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(41) "/wp-content/uploads/2013/03/lol-tiger.jpg" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(41) "/wp-content/uploads/2013/03/lol-tiger.jpg" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(53) "/wp-content/plugins/flattr/img/flattr-badge-large.png" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(65) "/wp-content/uploads/2011/08/eg8_welcome_to_civilized_internet.png" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(65) "/wp-content/uploads/2011/08/eg8_welcome_to_civilized_internet.png" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(53) "/wp-content/plugins/flattr/img/flattr-badge-large.png" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(63) "/wp-content/uploads/2013/03/BRADLEY-MANNING-DANIEL-ELLSBERG.jpg" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(63) "/wp-content/uploads/2013/03/BRADLEY-MANNING-DANIEL-ELLSBERG.jpg" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(40) "/wp-content/uploads/2013/03/bradley2.jpg" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(40) "/wp-content/uploads/2013/03/bradley2.jpg" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(40) "/wp-content/uploads/2013/03/bradley1.jpg" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(40) "/wp-content/uploads/2013/03/bradley1.jpg" } array(3) { ["scheme"]=> string(5) "https" ["host"]=> string(26) "pressfreedomfoundation.org" ["path"]=> string(39) "/sites/default/files/full_statement.mp3" } array(3) { ["scheme"]=> string(5) "https" ["host"]=> string(26) "pressfreedomfoundation.org" ["path"]=> string(39) "/sites/default/files/full_statement.ogg" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(53) "/wp-content/plugins/flattr/img/flattr-badge-large.png" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(41) "/wp-content/uploads/2013/03/saroumane.jpg" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(41) "/wp-content/uploads/2013/03/saroumane.jpg" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(53) "/wp-content/plugins/flattr/img/flattr-badge-large.png" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(126) "/wp-content/uploads/2013/03/cctv_surveillance_cameras_swastica_graffiti_shoreditch_london_uk_doctorow_at_flickr_2770511071.jpg" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(50) "/wp-content/uploads/2013/03/attentifs-ensemble.png" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(53) "/wp-content/plugins/flattr/img/flattr-badge-large.png" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(104) "/wp-content/uploads/2013/03/Un-chiot-pendu-à-un-fil-à-linge-soulève-l’indignation-sur-Facebook.jpeg" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(104) "/wp-content/uploads/2013/03/Un-chiot-pendu-à-un-fil-à-linge-soulève-l’indignation-sur-Facebook.jpeg" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(53) "/wp-content/plugins/flattr/img/flattr-badge-large.png" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(14) "webcastory.com" ["path"]=> string(57) "/wcs2013/wp-content/uploads/2013/03/jean-michel-apati.jpg" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(14) "webcastory.com" ["path"]=> string(59) "/wcs2013/wp-content/uploads/2013/03/CriseConfianceSmall.jpg" } array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "reflets.info" ["path"]=> string(53) "/wp-content/plugins/flattr/img/flattr-badge-large.png" }

mitsukarenai commented 11 years ago

Donc visiblement l'url est correctement parsée. Tu peux enlever le var_dump, maintenant faut voir comment les fichiers sont inscrits dans le dossier, et comment indexés dans articles.db.

ghost commented 11 years ago

J'ai une instance php-fpm qui bosse avec les permissions de user1 et nogroup. Nginx bosse avec nobody et nogroup. Donc les fichiers sont inscrits avec les permissions user1:nogroup (c'est bien ce que tu demandais? ^^). $ ls -l total 136 -rwxr-xr-x 1 user1 nogroup 29991 Mar 29 12:08 autoblog.php drwxr-xr-x 3 user1 nogroup 192 Mar 29 11:58 b0b151623d660b48d845d954b49ae0f3e0e4eb16/ -rwxr-xr-x 1 user1nogroup 9173 Mar 23 15:07 class_rssfeed.php -rwxr-xr-x 1 user1 nogroup 1969 Mar 23 15:07 config.php -rwxr-xr-x 1 user1 nogroup 5362 Mar 23 15:07 functions.php -rwxr-xr-x 1 user1 nogroup 1537 Mar 23 15:07 icon-logo.svg -rwxr-xr-x 1 user1 nogroup 47389 Mar 23 15:07 index.php -rwxr-xr-x 1 user1 nogroup 454 Mar 23 15:07 README.md -rw-r--r-- 1 user1 nogroup 691 Mar 23 15:07 rss.png -rw-r--r-- 1 user1 nogroup 4932 Mar 29 11:57 rss.xml -rw-r--r-- 1 user1 nogroup 17 Mar 23 15:07 version -rwxr-xr-x 1 user1 nogroup 6085 Mar 23 15:07 xsaf3.php

mitsukarenai commented 11 years ago

Pas tout à fait :) Mais observons:

URL du fichier: http://autoblog.br4ndon.eu/b0b151623d660b48d845d954b49ae0f3e0e4eb16/media/2de3fc65.meme-refletz.jpg

URL telle qu'inscrite dans la base de données: http://autoblog.br4ndon.eu/9ae0f3e0e4eb16/media/2de3fc65.meme-refletz.jpg

Ça fait 26 premiers caractères en moins. Pourrais-tu vérifier la valeur de LOCAL_URI et ROOT_DIR ? (autoblog.php, lignes 41-54 et 35) Ce qui pourrait aider aussi: print de $path à chaque transformation.

La ligne 525 m'intrigue aussi, puisque c'est juste là qu'il y a le sha1. Au passage, var_dump un peu tout ça :)

ghost commented 11 years ago

(Je ne connais quasi rien en php ^^)

J'ai ajouté

'.LOCAL_URL.'

'.LOCAL_URI.'

'.ROOT_DIR.'

à la fin de la div "footer", et voici ce que ça donne:

Propulsé par Projet Autoblog 0.3.0 - Flux RSS Download: configuration (OPML) - articles http://autoblog.br4ndon.eu/9ae0f3e0e4eb16/ /root/b0b151623d660b48d845d954b49ae0f3e0e4eb16

Le LOCAL_URI étant la ligne absente.

Tu voudrais ensuite que j'ajoute un "var_dump($url);" ligne 526 c'est ça? Comment pourais-je afficher $path à chaque transformation?

mitsukarenai commented 11 years ago

Mmmh. Lignes 41 à 48, mets ça:

if (!defined('LOCAL_URL')) { // Automagic URL discover echo "root dir: ".ROOT_DIR."\n"; echo "docroot: ".$_SERVER['DOCUMENT_ROOT']."\n"; $path = substr(ROOT_DIR, strlen($_SERVER['DOCUMENT_ROOT'])); echo "path 1: ".$path."\n"; $path = (!empty($path[0]) && $path[0] != '/') ? '/' . $path : $path; echo "path 2: ".$path."\n"; $path = (substr($path, -1) != '/') ? $path . '/' : $path; echo "path 3: ".$path."\n"; define('LOCAL_URL', 'http' . (!empty($_SERVER['HTTPS']) ? 's' : '') . '://' . $_SERVER['HTTP_HOST'] . $path); echo "local url: ".LOCAL_URL; die; } else { die('LOCAL URL déjà défini'); }

Ça permettrait de retracer la constitution de LOCAL_URL. On verra la ligne 525 plus tard :)
(j'essaye de reproduire ça dans une virtualbox pendant ce temps)

ghost commented 11 years ago

Résutlat: root dir: /root/b0b151623d660b48d845d954b49ae0f3e0e4eb16 docroot: /var/www/root/brdn/autoblog/root path 1: 9ae0f3e0e4eb16 path 2: /9ae0f3e0e4eb16 path 3: /9ae0f3e0e4eb16/ local url: http://autoblog.br4ndon.eu/9ae0f3e0e4eb16/

Pour préciser si besoin: l'utilisateur employé par php-fpm pour traiter les requêtes php a pour root personnel: /var/www/root/brdn/autoblog/ -- d’où les chemins commençant par /root/ :)

mitsukarenai commented 11 years ago

Ah ça y est, j'y vois plus clair. Ah misère...

tu vois le docroot ? Il a une longueur de 32 caractères (c'est ce qui est retourné par strlen). Or, c'est ce qui est retranché au début de root_dir. root_dir fait 46 caractères et NE CONTIENT PAS LE DOCROOT (c'est ça l'imprévu).

substr: enlever 32 caractères au début de ROOT_DIR /root/b0b151623d660b48d845d954b49ae0f3e0e4eb16 devient donc: 9ae0f3e0e4eb16

Normalement ROOT_DIR aurait dû être ça pour que ça fonctionne comme prévu: /var/www/root/brdn/autoblog/root/b0b151623d660b48d845d954b49ae0f3e0e4eb16 (à peu près)

On va essayer d'adapter ça pour une compatibilité universelle :ambulance: Si on peut faire tout ça en URL relative, ça serait facile et efficace.

mitsukarenai commented 11 years ago

Re,

Peux-tu recréer à neuf les autoblogs et essayer avec le commit ? Si c'est bon, issue closed :)

ghost commented 11 years ago

Ah, je comprends le soucis maintenant... Et ton commit est efficace! Ça fonctionne impec'! Merci! \o/