2017-06-06 7 views
0

J'ai un script plutôt simple qui est censé ajouter une nouvelle ligne de chaîne à un fichier.PHP enregistrer dans le script de fichier donnant des erreurs après la mise à niveau vers PHP 7.0

if (isset($_POST["score"])) 
{ 
$myFile = $_SERVER['DOCUMENT_ROOT']."/xx/zz.txt"; 
$fh = fopen($myFile, 'r'); 
$theData = fread($fh, filesize($myFile)); 
fclose($fh); 

$File = $_SERVER['DOCUMENT_ROOT']."/xx/zz.txt"; 
$Handle = fopen($File, 'w'); 
$Data = $_POST["score"]."\n".$theData; 
fwrite($Handle, $Data); 
fclose($Handle); 
} 

Après mise à niveau vers PHP 7.0 Je reçois des erreurs:

fread() expects parameter 1 to be resource, boolean given in /home/zzz/public_html/zzz.php on line 7 
fclose() expects parameter 1 to be resource, boolean given in /home/zzz/public_html/zzz.php on line 8 

Quelqu'un pourrait-il expliquer pourquoi cette erreur apparaît et comment il peut être résolu? Qu'est-ce que c'est avec PHP 7.0 qui l'a soudainement empêché de fonctionner?

+1

Etes-vous sûr qu'il ne lit pas les anciens fichiers système de la version php précédente? Que montre 'phpinfo()' et ce fichier contient-il initialement du contenu? Si le fichier est vide, il va lancer cette erreur. Vérifiez également les autorisations. –

Répondre

5
//First, see if the file exists 
if (!is_file($myFile)) 
{ 
    die("<b>404 File not found!</b>"); 
} 

Ou vous pouvez essayer d'utiliser The SplFileObject class - une interface orientée objet pour un fichier.

1

Lorsque fopen() échoue, il retourne false. false n'est pas une ressource, donc l'avertissement.

Vous feriez mieux d'essai $fh avant de l'injecter comme un argument comme ressource:

if($fh = fopen($myFile, 'r')) { 

} 
+0

Cela signifierait que fopen fichier a échoué OPED $ _SERVER [ « DOCUMENT_ROOT »]. «/Xx/zz.txt » Mais j'ai vérifié et le dossier est là. Rien n'a changé ni dans le script ni dans les fichiers sur FTP. Pourquoi la mise à niveau vers PHP 7.0 provoquerait-elle soudainement l'échec de fopen? –

+0

Pourquoi ne pas vérifier les autorisations? Vous pouvez utiliser error_log() pour vous assurer que votre DOCUMENT_ROOT correspond à ce que vous pensiez être. – Collector