web-dev-qa-db-ja.com

JavaScriptを使用してテキストファイルをサーバーに保存する

PHPを使用せずにJavaScript/jQueryを使用してテキストを新しいテキストファイルに保存することは可能ですか?保存しようとしているテキストには、HTMLエンティティ、JS、HTML、CSS、およびPHPエスケープまたはurlencodeを使用したくないスクリプト!

PHP=を使用してのみ達成できる場合、エンコードせずにテキストをPHPに渡すにはどうすればよいですか?

21
user2202413

リクエストを処理するにはサーバー側のスクリプトが必要です。javascriptを使用して実行することはできません。

URIエンコードまたは特殊文字をPHPにエスケープせずに生データを送信し、新しいtxtファイルとして保存するには、postメソッドとFormDataを使用してajaxリクエストを送信できます。

JS:

var data = new FormData();
data.append("data" , "the_text_you_want_to_save");
var xhr = (window.XMLHttpRequest) ? new XMLHttpRequest() : new activeXObject("Microsoft.XMLHTTP");
xhr.open( 'post', '/path/to/php', true );
xhr.send(data);

PHP:

if(!empty($_POST['data'])){
$data = $_POST['data'];
$fname = mktime() . ".txt";//generates random name

$file = fopen("upload/" .$fname, 'w');//creates new file
fwrite($file, $data);
fclose($file);
}

編集:

Florianが以下で言及したように、FormDataは古いブラウザではサポートされないため( formdata browser compatibiltiy )、XHRフォールバックは必要ありません。したがって、XHR変数を次のように宣言できます。

var xhr = new XMLHttpRequest();

また、これはIE +10などのFormDataをサポートするブラウザでのみ機能することに注意してください。

39
razzak

JavaScriptやjQueryなどのクライアント側のスクリプトのみを使用してコンテンツをWebサイトに保存することはできませんが、AJAX POST=サーバー側で他の半分を非常に簡単に実行できます。

ただし、スクリプトなどの生のコンテンツをホスティングに簡単に書き込み可能にすることはお勧めしません。 AJAX POST=リクエストについて詳しく知りたい場合は、jQuery APIページをご覧ください。

http://api.jquery.com/jQuery.post/

ホスティングに生のスクリプトファイルを保存する場合は、次の点に注意する必要があります。このようなファイルを扱う場合は、セキュリティに非常に注意する必要があります!

ファイルのアップロード(javascriptがファイルの名前を選択できる場合にプレーンテキストを送信する場合、このほとんどが適用されます) http://www.developershome.com/wap/wapUpload/wap_upload.asp?page=securityhttps://www.owasp.org/index.php/Unrestricted_File_Upload

4
Joe F