2009-06-13 6 views
0

Je semble avoir une erreur bizarre que je n'arrive pas à comprendre. Mon site Web fonctionnait sur un serveur, mais quand je l'ai transféré à un autre, il a cessé de fonctionner. Je crois que je l'ai réduit l'erreur à cette ligne de code:move_uploaded_file se bloque?

$ret = move_uploaded_file($tmp_name, $orig_path); 

Ceci est exécuté par le biais d'un appel AJAX donc il est un peu difficile à déboguer, mais le script peut renvoyer un code d'erreur et mon JavaScript va le alert. Alors, je l'ai enveloppé dans deux de ces instructions de débogage:

echo json_encode(array(

    'success' => false, 

    'errno' => $tmp_name.' -> '.$orig_path, 

)); 

exit; 



$ret = move_uploaded_file($tmp_name, $orig_path); 



echo json_encode(array(

    'success' => false, 

    'errno' => 'no error', 

)); 

exit; 

Le premier fonctionne bien et recrache quelque chose comme:

error /tmp/phpk3RICU -> /home/username/Websites/website/photos/o/2-4a3354dd017a9.jpg 

Peut-être que je suis un peu un noob linux, mais je ne peux pas trouver /tmp/phpk3RICU sur mon système (est-il supprimé dès que le script se termine ou quoi?). Plus sur cela en une seconde cependant.

Si je supprime la première vérification de débogage et que move_uploaded_file est exécuté, la deuxième vérification de débogage ne semble jamais être exécutée, ce qui me porte à croire que move_uploaded_file est suspendu.

Si au lieu d'utiliser $tmp_name j'utilise un fichier I n'existe pas, alors le 2ème contrôle DOES est exécuté. Donc ... il semble qu'il ne veut tout simplement pas déplacer ce fichier tmp, mais il ne signale pas d'erreur. Je lance une nouvelle installation de la pile LAMP sur ma machine Unbutu, installée via apt-get ... faites moi savoir si vous avez besoin de plus d'informations.

Oh .. et je ne sais pas si c'est pertinent, mais le fichier est téléchargé via flash.

+0

mkdir échoue aussi réellement ...ne semble pas créer de fichiers et ne crachera pas une erreur. – mpen

Répondre

0

Ugh. Le problème était avec les autorisations. 755 était suffisant sur l'autre serveur, mais pas pour ce serveur, il semble ... pas vraiment sûr pourquoi, je suppose que PHP fonctionne sous un utilisateur différent? Je ne suis pas vraiment sûr de la façon dont fonctionne l'ensemble des permissions. Ce qui me dépasse vraiment est pourquoi mkdir et move_uploaded_file n'ont pas échoué et retournent faux ...

1

Téléchargez-vous le fichier via l'appel AJAX? Les fichiers téléchargés sont supprimés dès que le script que vous avez téléchargé pour terminer l'exécution - c'est pourquoi vous ne pouvez pas le trouver dans/tmp.

1

Essayez de dire à PHP cracher sur toutes les erreurs:

error_reporting(E_ALL); 

Il pourrait y avoir une différence de configuration qui se brise sur un de vos serveurs. De la move_uploaded_file() Page manual:

Note: move_uploaded_file() est à la fois mode sans échec et open_basedir conscient. Cependant, des restrictions sont placées seulement sur le chemin de destination pour permettre le déplacement des fichiers téléchargés dans lesquels nom de fichier peut entrer en conflit avec de telles restrictions . move_uploaded_file() assure la sécurité de cette opération en ne permettant que les fichiers téléchargés via PHP à déplacer.