FTP サーバーに接続し、ファイルの内容を読み取り、小さな変更を加え、元のファイルを上書きする PHP コードがあります。
次のようになります。
$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を使用しています(私は彼の例を送ったので結果の..)。彼の関数は、ファイルを「fopen」できなかった場合は「false」を返し、成功した場合は「bytes」を返します。私は「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" は存在しないファイルへのパスであるため、"fopen" の "w" モードで作成する必要があります)。