5

この機能を使用してかなり複雑な PHP アプリをいくつか作成したことがあるので、ここで何が起こっているのかわかりません。

現在、オンライン履歴を使用してコンテンツを保存するアプリを作成しています (ajax get 経由)。ユーザーの履歴をファイルに保存するために私が作成した API は、非常に単純です。

$myFile = "./snhistory/".$_GET["uid"];
$stringData = urldecode($_GET["name"])."\n";
$file = fopen($myFile,"a");
fwrite($file,$stringData);
fclose($file);

nameこれは、 で見つかったデータと新しい行をファイルの末尾に追加するようなコードのように見えますよね? まあ、それはPHPの見方ではありません。1 つの名前を追加し、別の名前でコードを実行すると、最初の名前が上書きされ、2 番目の名前だけが表示されます。考えられることは何でも試しました:

 file_put_contents($myFile,file_get_contents($myFile).$stringData);

 file_put_contents($myFile,$stringData,FILE_APPEND);

fopen($myFile,"w");
fseek($file,0,SEEK_END);

そして、すべてが同じ動作を生成します。PHPに何か問題がありますか、それともここに何か欠けていますか? コードに問題があった場合は、2 番目に試したことで修正されていたような気がします。しかし、よくわからないので、ここでみんなに尋ねています。

提供できる助けがあれば、本当に感謝しています。

編集:答えによると、文字列の問題は、文字列に句読点が含まれて'おり、何らかの理由で、URL のエンコードとエスケープが機能しないことでした。最終的な回答については、回答の編集をお読みください。

4

2 に答える 2

1

マシンで次のコードを実行してみてください。

<?php
$myFile = "./myfile.txt";
$myString="hello world\n";
$fp = fopen($myFile, "a");
fwrite($fp, $myString);
fclose($fp);
?>

初めて実行したとき(コマンドラインから、をphp app.php使用して、「hello world」行が1つ含まれるファイルを作成します。

もう一度実行すると、2 つの行が表示されます。繰り返しますが、3つあります...

これは、基本的な php インストールの適切なテストです。これが機能しても問題が解決しない場合は、使用している変数に問題があるか、ディレクトリのアクセス許可などがあります。完全な解決策ではありませんが、絞り込むのに役立つ何かがありますか?

EDIT コメントでの議論に基づいて、この動作は(URLエンコードされた)変数($_GET("name"))の内容に応じて行き来するようであり、解決策は変数を「クレンジング」することです-何でも取り除きます」悪い」文字は、この上書き動作を引き起こします。この情報を回答に追加しているので、人々は回答に苦労する必要がありません.どの文字列コンテンツが動作を表示させるかについて詳細を提供していただければ、コミュニティに役立ちます.

于 2013-05-01T03:11:12.173 に答える