Я пишу функцию в php, на стороне клиента. У меня есть изображение холста, которое я использую toDataUrl () вместе с именем файла, чтобы сохранить изображение на сервере. Вот код:
<?php $imageData=$GLOBALS['HTTP_RAW_POST_DATA']; $data = json_decode($imageData, true); $file = $data["file"]; $image = $data["data"]; $filteredData=substr($image, strpos($image, ",")+1); $unencodedData=base64_decode($filteredData); $fp = fopen( 'image/' . $file , 'wb' ); fwrite( $fp, $unencodedData); fclose( $fp ); ?>
Дело в том, что этот код работает. И для двух из трех страниц, которые я использовал, он работает отлично. Проблема в том, что я копирую и вставляю его в третий раз, чтобы реализовать его снова, по какой-то причине файл создается на сервере, за исключением того, что в файл не записаны данные. Я не думаю, что это проблема на стороне клиента, потому что я пишу в сообщении об отладке в javascript и отладочном эхом в PHP, и оба могут распечатать данные в порядке. Я сделал этот короткий файл отладки:
<?php $fp = fopen('data.txt', 'wb'); if(is_writable('data.txt')){ echo "file is writable<br>"; } if(fwrite($fp, 'test') == FALSE){ echo "failed to write data<br>"; } fclose($fp); ?>
И выход
file is writable failed to write data
Я пробовал использовать chmod и все, папку, текстовый файл, прежде чем писать до 0777, и я все равно получаю тот же результат; файл создается, но данные не записываются. Есть ли что-то, чего я не вижу или какие-либо другие подходы, которые могут помочь. Я ничего не нашел в google и до сих пор не понял, почему один и тот же код работал точно так, как ожидалось дважды, прежде чем внезапно прекратить без видимых причин.
Заранее спасибо.
Я знаю, что это старый пост, но у меня была очень похожая проблема, и я нашел решение (по крайней мере для меня)! У меня закончилось дисковое пространство на моем сервере, поэтому он мог создать файл с 0 байтами, но не писал бы ему. После того, как я очистил какое-то место (удалил файл с ошибкой 13gb.log), все снова заработало, как ожидалось.
Если fopen работает, но нет таинственно, не проверяйте дисковое пространство. 'df -h' – это команда для проверки дискового пространства на сервере linux.
вместо $fp = fopen('data.txt', 'wb');
укажите $fp = fopen('data.txt', 'w');
и попробовать
Изменено "wb" на "w"
Когда вы пишете $fp = fopen('data.txt', 'w');
для вашего сайта site.com, имеющего root в / var / www / website /, и если файл php находится по адресу /var/www/website/php/server/file/admin.php или что-то подобное, он фактически создаст файл на /var/www/website/data.txt
Попробуйте дать абсолютный путь или путь относительно вашего корня домена, чтобы создавать такие файлы, как,
$fp = fopen('php/server/file/data.txt', 'w');
Попробуйте команду find, чтобы узнать, создан ли файл где-либо еще в каталоге папки, используя в Ubuntu следующее:
find / var / www / website / -name 'data.txt'
У меня была эта проблема, возможно, вы сможете решить, если у вас есть аналогичная проблема.