2012-01-27 4 views
-1

ファイルをリモートサーバからPHP経由でローカルサーバにコピーしたいとします。私はこれを行うには "最高の"アプローチがよくわからないので、私はこれを達成するためのいくつかの異なる方法を試しましたが、私はそれらの方法でロードブロッキングを打っています。file_put_contents with ampersand "&"

私はJSONPを使って(A)リモートサーバーを呼び出して.phpファイルの内容を取得し、ローカルスクリプトのローカルサーバーに渡してから(B)を呼び出してローカルのPHPスクリプトを使用し、file_put_contentsを使用してコンテンツをローカルサーバに書き込みます。

アンパサンドに達するまで、すべて正常に動作します。ファイルの書き込みはそこで停止します。


編集したデータが表示されます。

if ($mysqlErrorConnectServer || $mysqlErrorConnectDb || $mysqlErrorConfigTableMissing) { 
    $errorMsg .= '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"' 
        . '"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">' 
        . '<head>' 
        . '<title>Example website &copy; - Example description of example site</title>' 
        . '<style type="text/css">' 

あなたが戻ってくるコードを見ればそう...そこのページに著作権記号を表示するためにそこにする必要がある「&コピー」である...しかし、それは書いてから停止しますfile_put_contentsを残りのファイル

+2

多分私はいくつかのコードを表示することができます。 – cambraca

+0

私は今コードが違うものを試してから混乱しているので。何よりも混乱を招くでしょう。 –

+0

次に、コードを最初に修正します。ここでは、広く推測することであなたの混乱をきれいにすることはありません。 – hakre

答えて

0

私の自身の質問に答える前の応答からコピーされました。

ここに問題の答えがあります。 :)それは私がまだ遭遇していなかったシンプルなものであることが分かっていた。データをローカル書込みスクリプトに送る前に(リモートから受け取った後)、私は返されたレスポンスにencodeURIComponent()を呼び出し、それをローカルスクリプトに送信して書き込みます。

魅力的な作品です。

3

リモートサーバーのファイルをhtmlspecialchars()でエンコードし、ローカルエンドでhtmlspecialchars_decode()で受信するとデコードする必要があるようです。

より良い代替方法は、リモートサーバーのファイルbase64_encode()ですが、ローカル受信サーバーのbas64_decode()です。

+0

これは問題であるデータ転送ではありません。リモートサーバーからそのデータを受け取った後の実際の書き込みです。戻って来るデータは完全です...私はそのデータを私のローカルコピーに書きますが、アンパサンドに達するとfile_put_contentsはそれ以上書き込みを停止します。 著作権のhtmlコードがスクリプトデータの一部に含まれており、&©に達したときに書き込みが停止します。 –

+0

@Lostinthesauceおそらく、ソースを16進エディタなどで表示して、ファイルを上書きする可能性のある印刷不可能な文字を探してください。/ –

+0

file_put_contents( 'testing.php'、 '<?php echo "この関数のテスト©"?> '); まあ、私はこれを取り戻す内容の代わりにこれをテストしました。これは実際にファイルに書き込みます。私は困惑している。 –

0

なぜこのためにPHPを使用しないのですか? file_get_contents()ため

<?php 
$file_contents = file_get_contents('http://www.google.com/'); 
$handle  = fopen('new-file.html', 'w'); 
frwite($handle, $file_contents, strlen($file_contents)); 
fclose($handle); 
?> 

ドキュメント:http://php.net/file_get_contents

あなたはAJAXでそれをやっている方法は、データの別の転送であるあなたができる場合は、PHPからそれが海峡取得する必要があります。あなたのサーバーにはインターネット接続が知られていますが、ユーザーはインターネットに接続できず、ユーザーに情報のダウンロードとアップロードの両方を依頼しています。

+0

Phpは、ローカルサーバーに対してREMOTEサーバーをチェックできず、2つのスクリプトが一致しているかどうかを確認できません。 tマッチ。私が知る限り、これを行う唯一の方法は、JSONPを呼び出してREMOTEサーバーを呼び出し(プロセスでローカルファイルハッシュを渡す)、LOCALハッシュに対してREMOTEハッシュをチェックすることです。一致しない場合は、REMOTEファイルの内容を渡して、LOCALファイルに内容を書き込むことができます。 –

+0

PHPはリモートドキュメントの内容を取得できます。 'file_get_contents()'のPHPドキュメントの最初の例は、 "http://"プロトコルを使用する "ウェブサイトのホームページのソース"を取得する方法です。 http://php.net/file_get_contents。私はここで議論するつもりではなく、あなたが望むことをしない 'file_get_contents()'の動​​作がどのような振る舞いをしているのだろうかと思っています。私はそれがリモートサーバーがサーバー側のコードを解析した後に出力を与えると信じていますが、リモートサーバーから実際のPHPコードが必要ですか? – Jasper

+0

私はあなたが議論しているとは思っていません...私はどちらも私には多少混乱しているので、何か入力を感謝します。私はページの "最終結果"を取得しようとしていない...私は、 "正確なコーディング"を取得しようとしている.phpファイル自体。これを達成する方法は、(1)ファイルが異なる場合に最初に見つけ出す(2)リモートファイルの内容を取得する(3)コンテンツをローカルファイルに書き込むことです。ローカルサーバだけを確保するためのメソッドを使ってリモートファイルを呼び出すので、私はそのサーバ上でスクリプトを呼び出して情報などを取得し、それを私に送り返す必要があります。 –

関連する問題