2009-07-04 6 views
1

Je suis coincé et j'ai besoin d'une main. J'espère que quelqu'un peut aider?PHP - Échec de l'écriture

Quelqu'un at-il une idée de l'échec de l'écriture dans ce code?

$write_file = "/usr/home/public_html/php/users_v2.sql"; 
$write_handle = fopen($write_file, "w") || die("Couln't open users_v2!"); 

if (is_writeable($write_file)) { 
    if ($write_handle === FALSE) echo 'Failed handle?!'; 
    if (fwrite($write_handle, "Hi\n") === FALSE) echo "Failed write!\n"; 
} 

fclose($write_handle); 

Merci d'avance.

+0

Vous ne savez pas, mais pouvez-vous vérifier si le programme dispose des autorisations nécessaires pour écrire dans le fichier? –

+0

Oui, j'ai vérifié ça. 777 à travers le conseil. Il est tellement bizarre. – frio80

+0

Avez-vous vérifié les journaux d'erreurs de votre serveur? – PatrikAkerstrand

Répondre

1

Donc $ write_handle contiendra vrai ou faux, au lieu de la ressource de fichier. Une meilleure façon d'ouvrir un fichier pour l'écriture et le test qu'il a réussi serait ceci:

$write_handle = fopen($write_file, 'w'); 
if ($write_handle === false) 
{ 
    die('Could not open file ' . $write_file); 
} 

De plus, vous pouvez utiliser la fonction file_put_contents() qui gère les fopen(), fwrite() et fclose() pour toi. Je recommande ceci uniquement si vous n'exécutez qu'une seule écriture dans le même fichier, car il y aura beaucoup de surcharge, et à moins que vous ne passiez le drapeau FILE_APPEND, il va vider le fichier pour chaque écriture.

0

Je l'ai vu utilisé partout mais le problème est le || die ("Couln't open users_v2!");

D'abord, j'ajouté:

error_reporting(E_ALL); 

pour voir ce que php rapporte des erreurs. Renvoie une erreur de gestionnaire de flux et un descripteur de fichier non valides de 1. Sans le gestionnaire de fichiers renvoyé est "ID de ressource #x".

Modification de la ligne:

$write_handle = fopen($write_file, "w"); // || die("Couln't open users_v2!"); 

et votre code fonctionne bien. Je vais poster ceci sur php.net maintenant. En utilisant l'opérateur OR lors de la création de votre handle de fichier, vous renvoyez une valeur booléenne en fonction de l'opération.

+0

Son fonctionnement sur FreeBSD. – frio80

Questions connexes