PHP fopen per la scrittura fallisce

Sto avendo qualche problema con un file PHP che ho. La mia chiamata a fopen() sta fallendo e non riesco a capire perché. Dispongo di autorizzazioni complete per il file (attualmente impostato su 777) e l’unica cosa che posso pensare è che il file è già aperto, ma non riesco a capire perché dovrebbe essere. Il mio codice è composto da una pagina PHP di destinazione e una pagina PHP di azione. La pagina di destinazione è la seguente:

    Canteen Manager     

Add Stock

Select Product:

<?php class Product { public $name = ""; public $amount = ""; } $myfile = fopen("stock.txt", "r") or die("Unable to open file!"); while(!feof($myfile)) { $fileContents = $fileContents . fgets($myfile); } fclose($myfile); $dictionary = json_decode($fileContents, true); for ($i = 0; $i < count($dictionary); ++$i) { echo "" . $dictionary[$i]['name'] . " "; } ?>

Quando l’utente invia il modulo, chiama il seguente file PHP:

    Canteen Manager    <?php /*$myfile = fopen("stock.txt", "r") or die("Unable to open file!"); while(!feof($myfile)) { $fileContents = $fileContents . fgets($myfile); } fclose($myfile);*/ $fileContents = file_get_contents("stock.txt"); echo $fileContents; $dictionary = json_decode($fileContents, true); $dictionary[$_POST['products']]['amount'] = $dictionary[$_POST['products']]['amount'] + $_POST['txtNumber']; $json = json_encode($dictionary, true); $writeFile = fopen("stock.txt", "w") or die("Unable to open file for writing!"); $txt = $json; fwrite($writeFile, $txt); fclose($writeFile); echo "

Added " . $_POST['txtNumber'] . " items to " . $dictionary[$_POST['products']]['name'] . "



"; ?>

L’azione del file PHP cade durante $writeFile = fopen("stock.txt", "w") or die("Unable to open file for writing!"); linea, quando esce con ‘Imansible aprire il file per scrivere!’ linea.

Che cosa sto facendo di sbagliato?

MODIFICARE
Ho creato un file PHP di prova (chiamato test.php) e collocato nella stessa posizione sul server come i miei file correnti. Il file conteneva solo il seguente codice:

    Canteen Manager     <?php $writeFile = fopen("stock.txt", "w") or die("Unable to open file for writing!"); $txt = $json; fwrite($writeFile, '[{"name":"Boost","amount":10},{"name":"Chicken Noodles","amount":10},{"name":"Twix","amount":10}]'); //fwrite($writeFile, "test"); fclose($writeFile); echo "Success"; ?>   

Quando l’ho eseguito inizialmente, è riuscito ad aprire il file, ma non ci scriveva. Invece lo cancellerebbe. Da quando ho copiato il codice sul mio file live, entrambi i file hanno ricevuto l’errore che stavo ottenendo in precedenza. Per me, questo supporta la teoria che il file è aperto da qualche parte e quindi non può essere riaperto. Ho pensato che potesse essere il mio client FTP, quindi l’ho chiuso e provato, ma lo stesso errore. Ho confermato che il file (stock.txt) non è aperto nel mio browser, né in uso da alcun programma sul mio laptop.

Sono davvero bloccato su questo. Qualcuno ha un modo migliore per scrivere su un file (ricorda che sto scrivendo il file in eccesso a questo punto). Gradirei davvero qualche consiglio, sia per quanto riguarda la risoluzione dei miei problemi, sia per un altro modo di affrontare il problema.

MODIFICA 2
Ho trovato che i permessi dei file erano impostati su 644 nonostante io li avessi settati su 777, quindi li ho riportati a 777 e non ho ricevuto l’avviso del dado. Tuttavia, quando ho eseguito il codice, ho trovato che non ha scritto sul file, ma lo ha solo cancellato (svuotato dei caratteri). Il mio codice di scrittura è sopra, ma lo copierò qui sotto per chiarezza:

 $fileContents = file_get_contents("stock.txt"); echo $fileContents; $dictionary = json_decode($fileContents, true); $dictionary[$_POST['products']]['amount'] = $dictionary[$_POST['products']]['amount'] + $_POST['txtNumber']; $json = json_encode($dictionary, true); $writeFile = fopen("stock.txt", "w") or die("Unable to open file for writing!"); $txt = $json; fwrite($writeFile, $txt); fclose($writeFile); echo "

Added " . $_POST['txtNumber'] . " items to " . $dictionary[$_POST['products']]['name'] . "



";

Eventuali suggerimenti?

Assicurati che il proprietario del file sia apache .

Il comando è chown apache: apache stock.txt

Per me funziona.

Alla fine ho risolto questo problema, in gran parte grazie all’aiuto di @ParrisVarney. Il problema era nelle autorizzazioni del file. Ogni volta che ho caricato una nuova versione del mio file (PHP o TXT) o modificato la versione online del file stock.txt nel mio client FTP, reimposta i permessi del file a 644. Ho dovuto cambiarli manualmente a 777 prima di continuare dopo ogni caricamento, e quindi è stato in grado di aprire il file.

Per quanto riguarda il problema di scrittura, in cui il file di testo è stato cancellato, era perché la mia chiamata json_encode non era corretta. Ho avuto un valore booleano incluso come attributo che stava causando il fallimento. Rimuovendo il true da $json = json_encode($dictionary, true); e rendendolo solo $json = json_encode($dictionary); , Sono riuscito a ottenere lo script per scrivere i dati.

Grazie per l’aiuto di tutti, è molto apprezzato.

Spero che questa risposta possa aiutare chiunque abbia problemi simili.