У меня есть PHP-код, который подключается к FTP-серверу, читает содержимое файла, вносит незначительные изменения, а затем переопределяет исходный файл.
это выглядит как:
$stream_context = stream_context_create(array('ftp' => array('overwrite' => true)));
$file_content = file_get_contents($ftp_file); // this line works
$file_content = str_replace('some content', 'another content', $file_content); // this also..
file_put_contents($ftp_file, $file_content, 0, $stream_context); // this one doesn't :/
реальная проблема в том, что «file_put_contents» работал долгое время, но теперь это не так. то, что он делает сейчас, странно: он удаляет исходный файл с сервера.. также, если я изменяю его на что-то вроде:
file_put_contents($new_ftp_file, $file_content);
насколько я знаю, он должен создать новый файл и поместить в него содержимое, но он его вообще не создает.
служба хостинга, которую я использую, изменила версию PHP несколько дней назад. Я не помню, какая была предыдущая версия, но текущая: 5.2.17
Благодарность! :)
некоторые изменения
Я нашел этот фрагмент: http://www.php.net/manual/en/function.file-put-contents.php#86864 делает то же самое, что и "file_put_contents", но с foen, fwrite и fclose (я отправляю его пример из-за результатов..). его функции возвращают «false», если он не может «fopen» файл, или «байты», если это удалось. Я получил "false" :/ что означает, что он даже не мог сделать:
@fopen($filename, 'w');
хотя "file_get_contents" с тем же адресом файла работает.
чтение работает (но если взять $filename и использовать его самостоятельно на клиентском FTP - работает):
@fopen($filename, 'r');
«open base_dir» для моего хостинга (который выполняет действие) имеет значение false, но для целевого хостинга (который имеет целевой файл) установлено значение true.
У меня была идея сохранить новый контент в новом файле, поэтому я попробовал что-то вроде:
$f = @fopen($new_ftp_file, 'w'); //this one seems to work and connect
fwrite($f, $file_content); // this one seems to work either and returning the number of byes..
fclose($f);
проблема в том, что ни один из них не работает. Я вошел на FTP-адрес, используя те же учетные данные, что и мой сценарий, и я не нашел новый файл. Он вообще не создавался. (напомню, "$new_ftp_file" - это путь к несуществующему файлу, поэтому режим "w" на "fopen" должен создать его).