2012-04-12 42 views
0

私は、ユーザーが使用できるWYSIWYGエディタを備えたページを持っています。編集後、ボタンを押すことができ、javascriptは現在のページをsave.phpファイルにPOSTし、新しい情報でページを更新する必要があります。file_put_contentsが上書きされないのはなぜですか?

2つの問題があります。 1つは、最初にページに更新されたファイルが読み込まれないことです。ユーザーは更新されたページを表示するためにページをリフレッシュする必要があります(ファイルを書き込むには余分な時間がかかりますか?)。 2番目の問題は、初めて一時ファイルを作成した後に上書きすることができないため、最初の更新後にページが更新されないことです。 WYSIWYGエディタページ(editor.php)上

のJavascript機能::ここでは私が働いているスニペットですfopenを使用しない理由

function refresh(html,username,info) 
{ 
    $.post("save.php", { html: html, username: username }); 
    window.location = 'editor.php?info=' + info; 
} 

save.phpファイル

$html = $_POST['html']; 
$username = $_POST['username']; 
file_put_contents('temp/' . $username . '.txt', $html); 
+6

ゲーフィングセキュリティホール! 'username = ../save.php%00'と' html = <?php something evil'は誰でもあなたのPHPファイルを上書きして任意のコードを実行できるようにします – ThiefMaster

+1

あなたのデータを常に適切に消毒します。方法がわからない場合は、チュートリアルをお読みください。 –

+0

ファイルの作成時にどのような権限がありますか? – Jon

答えて

1

ブラウザが再配置を行うためにポストから成功のコールバックを使用して、次のページに移動する前に、POSTリクエストを発行していないかもしれないとして:

function refresh(html,username,info) { 
    $.post("save.php", { html: html, username: username }, function() { 
    window.location = 'editor.php?info=' + info; 
    }); 
} 

他の人がすでに直接データを使用して、コメントしてきたようにそれをサニタイズせずにフォームの投稿から削除することは本当に悪い計画であり、あらゆる種類の悪意のある攻撃までサーバーを開くことができます。 https://stackoverflow.com/search?q=sanitize+php

サーバーにデータが届いている場合は、「temp」ディレクトリのアクセス許可で、Webサーバーユーザーからの書き込みアクセスが許可されていることを確認してください(アクセス権がある場合はSSHをサーバーに接続してchmod go+w /path/to/tempを実行してください。それ以外の場合は、ほとんどのFTPプログラムでファイルのアクセス許可を設定することもできます)。

0

fwrite

は、単に使用:phpのため

$html = $_POST['html']; 
$username = $_POST['username']; 
$file = "temp/" . $username . ".txt"; 

if (!file_exists($file)) { 
    $files = fopen($file, "x+"); 
} else { 
    $files = fopen($file, "w+"); 
} 

if(fwrite($files, $html)) { 
    echo "Success!"; 
} else { 
    echo "Failure!"; 
} 

とJSでのリフレッシュ作業をするために、このような成功機能に文を入れてみてください:

function refresh(html,username,info) { 
    $.post("save.php", { html: html, username: username }, 
      function (response) { 
      window.location = 'editor.php?info=' + info; 
      console.log(response);// for debugging :) 
      }); 
} 
+1

なぜ 'fopen'は' file_put_contents'と違う動作をしますか? – Jon

+0

よく 'file_put_contents'が正しいコードで動作していません。私たちが見ることができないコードが正しいと仮定すると、' fopen'を試してみると論理的です。 – CKKiller

+0

私はfopen/fwriteも試みましたが、同じ結果が出ました。しかし、成功機能をありがとう。 – James

0

AJAXリクエストがasynchroneがそうですリダイレクションが開始されると書き込み動作が進行中である可能性があります。リダイレクトを行うには、$ .postアクションの終了したエキストを聞く必要があります。

関連する問題