J'ai un script PHP qui crée des fichiers sur un serveur. Ce matin, je me
suis aperçu que ces fichiers étaient tronqués, de taille soit nulle soit
multiple de 4096 octets.
J'ai vérifié qu'il me restait de la place sur le serveur (quota utilisé
à 20%) ; le code de retour de fwrite est correcte (pas === FALSE) ; j'ai
(enfin l'utilisateur avec lequel est exécuté php) le droit d'écrire dans
le répertoire. Bref, je ne comprends vraiment pas, d'autant plus que
cela fonctionne parfois. Le symptôme le plus aberrant est pour moi la
coupure en multiple de 4096 o.
J'ai cherché en vain dans les différentes documentations, sur Google et
les forums. Pour info, le code incriminé est le suivant ($content est le
contenu du fichier et peut être assez gros, quelques dizaines de ko) :
Je sais que $size est inutile, mais j'ai été obligé de l'ajouter pour
essayer de détecter l'erreur (test sur la différence entre la taille du
contenu et la valeur de retour de fwrite).
Si quelqu'un a déjà rencontré ce problème ou a une idée quelconque, il
est le bienvenue.
Cordialement,
--
Q: Connaissez-vous la différence entre l'ignorance et l'apathie ?
R: J'en sais rien et je m'en fous.
Mathieu Goutelle - <URL:http://webperso.easyconnect.fr/goutelle/>
Salut, le code donnée si dessus contient quelques erreurs (enfin 2)
il y a 3 = dans le if , qui n'a pas de d'accolade fermante => $fp = fopen($nom, 'w'); $size = strlen($content); $result = fwrite($fp, $content, $size) ; if ($result == FALSE || ($result - $size) != 0) { echo "Erreur lors de l'écriture."; fclose($fp); unlink($nom); } else { fclose($fp); chmod($nom, 0666); }
Salut, le code donnée si dessus contient quelques erreurs (enfin 2)
il y a 3 = dans le if , qui n'a pas de d'accolade fermante
=>
$fp = fopen($nom, 'w');
$size = strlen($content);
$result = fwrite($fp, $content, $size) ;
if ($result == FALSE || ($result - $size) != 0) {
echo "Erreur lors de l'écriture.";
fclose($fp);
unlink($nom);
}
else {
fclose($fp);
chmod($nom, 0666);
}
Salut, le code donnée si dessus contient quelques erreurs (enfin 2)
il y a 3 = dans le if , qui n'a pas de d'accolade fermante => $fp = fopen($nom, 'w'); $size = strlen($content); $result = fwrite($fp, $content, $size) ; if ($result == FALSE || ($result - $size) != 0) { echo "Erreur lors de l'écriture."; fclose($fp); unlink($nom); } else { fclose($fp); chmod($nom, 0666); }
Peut être cela va t'il aider @+
.
Mathieu Goutelle
Salut,
le code donnée si dessus contient quelques erreurs (enfin 2)
il y a 3 = dans le if , qui n'a pas de d'accolade fermante
Merci, mais en fait, il n'y a pas d'erreur dans le code : - j'ai effectivement oublié une accolade fermante dans mon copier-coller, mais ce n'est pas ça qui cause ce problème. Une accolade oubliée, cela provoque un message d'erreur relativement clair et j'arrive à m'en apercevoir sans poser une question sur un forum ;) ; - les 3 '=' sont là pour être sûr que les deux membres ont même type et même valeur. Dans ce cas, c'est nécessaire car c'est la valeur booléenne 'FALSE' qui permet de détecter une erreur et pas la valeur zéro (qui est un indicateur de succès) et qui pourrait être évaluée comme 'FALSE'. cf. <http://www.php.net/manual/fr/language.operators.comparison.php>.
Bref, sans vouloir te décevoir, c'est loin d'être aussi simple que ça... De toute façon, le problème a disparu ce matin. Je pencherai donc pour un problème momentané sur le serveur, mais du coup, je ne suis pas capable de savoir lequel et donc, si ça dure plus longtemps la prochaine fois, de prévenir mon hébergeur. L'informatique, c'est quand même beaucoup de mystère parfois... ;-)
Cordialement, -- Q: Connaissez-vous la différence entre l'ignorance et l'apathie ? R: J'en sais rien et je m'en fous. Mathieu Goutelle - <URL:http://webperso.easyconnect.fr/goutelle/>
Salut,
le code donnée si dessus contient quelques erreurs (enfin 2)
il y a 3 = dans le if , qui n'a pas de d'accolade fermante
Merci, mais en fait, il n'y a pas d'erreur dans le code :
- j'ai effectivement oublié une accolade fermante dans mon
copier-coller, mais ce n'est pas ça qui cause ce problème. Une
accolade oubliée, cela provoque un message d'erreur relativement
clair et j'arrive à m'en apercevoir sans poser une question sur un
forum ;) ;
- les 3 '=' sont là pour être sûr que les deux membres ont même type
et même valeur. Dans ce cas, c'est nécessaire car c'est la valeur
booléenne 'FALSE' qui permet de détecter une erreur et pas la valeur
zéro (qui est un indicateur de succès) et qui pourrait être évaluée
comme 'FALSE'. cf.
<http://www.php.net/manual/fr/language.operators.comparison.php>.
Bref, sans vouloir te décevoir, c'est loin d'être aussi simple que
ça... De toute façon, le problème a disparu ce matin. Je pencherai donc
pour un problème momentané sur le serveur, mais du coup, je ne suis
pas capable de savoir lequel et donc, si ça dure plus longtemps la
prochaine fois, de prévenir mon hébergeur. L'informatique, c'est quand
même beaucoup de mystère parfois... ;-)
Cordialement,
--
Q: Connaissez-vous la différence entre l'ignorance et l'apathie ?
R: J'en sais rien et je m'en fous.
Mathieu Goutelle - <URL:http://webperso.easyconnect.fr/goutelle/>
le code donnée si dessus contient quelques erreurs (enfin 2)
il y a 3 = dans le if , qui n'a pas de d'accolade fermante
Merci, mais en fait, il n'y a pas d'erreur dans le code : - j'ai effectivement oublié une accolade fermante dans mon copier-coller, mais ce n'est pas ça qui cause ce problème. Une accolade oubliée, cela provoque un message d'erreur relativement clair et j'arrive à m'en apercevoir sans poser une question sur un forum ;) ; - les 3 '=' sont là pour être sûr que les deux membres ont même type et même valeur. Dans ce cas, c'est nécessaire car c'est la valeur booléenne 'FALSE' qui permet de détecter une erreur et pas la valeur zéro (qui est un indicateur de succès) et qui pourrait être évaluée comme 'FALSE'. cf. <http://www.php.net/manual/fr/language.operators.comparison.php>.
Bref, sans vouloir te décevoir, c'est loin d'être aussi simple que ça... De toute façon, le problème a disparu ce matin. Je pencherai donc pour un problème momentané sur le serveur, mais du coup, je ne suis pas capable de savoir lequel et donc, si ça dure plus longtemps la prochaine fois, de prévenir mon hébergeur. L'informatique, c'est quand même beaucoup de mystère parfois... ;-)
Cordialement, -- Q: Connaissez-vous la différence entre l'ignorance et l'apathie ? R: J'en sais rien et je m'en fous. Mathieu Goutelle - <URL:http://webperso.easyconnect.fr/goutelle/>