2012-03-17 16 views
0

文字列を.txtファイルに書き込む単純なPHPスクリプトを作成しようとしています。 シンプル。そのために私は、この持っている:特定のパスに* .txtファイルをPHPで保存する方法は?

<?php 
if(isset(isset($_GET["fileName"]) == true && isset($_GET["output"]) == true){ 
    $fp = fopen($_GET["fileName"], "a+"); 
    if($fp !== null){ 
     fputs($fp, $_GET["output"] . "\r\n"); 
     fclose($fp); 
    } 
} 
?> 

をしかし、私は本当に特定の場所に保存できるようにする必要がありますので、私はこれを書いている:

<?php 
if(isset($_GET["filePath"]) == true && isset($_GET["fileName"]) == true && isset($_GET["output"]) == true){ 
    $fp = fopen($_GET["filePath"] . $_GET["fileName"], "a+"); 
    if($fp !== null){ 
     fputs($fp, $_GET["output"] . "\r\n"); 
     fclose($fp); 
    } 
} 
?> 

しかし、もちろんの

が、これは動作しません。
1. PHPを使用して特定の場所に保存するにはどうすればよいですか?
2.このパスを相対パスにすることはできますか? (私はちょうど "/出力/"を送信し、期待どおりに保存されます)。

ありがとうございます。

今、私はここにいる:

<?php 
if(isset($_GET["filePath"]) && isset($_GET["fileName"]) && isset($_GET["output"])){ 

    $filename=preg_replace('/[^a-z0-9]/i', '', $_GET['fileName']).'.txt'; 
    $filepathSanitized='http://thepathtomywebsite/~subdomain/'.$_GET["filePath"].$filename; 

    echo $filepathSanitized; // i get the correct path, but no file is present there 
    $fp = fopen($_GET["filepathSanitized"], "a+"); 
    if($fp !== null){ 

     fputs($fp, $_GET["output"] . "\r\n"); 
     fclose($fp); 
    } 
    else echo ('Something wrong'); // it never gets to this 
} 
?> 

と私は、このように上記呼び出しています:

$.get("save_me.php", { filePath: "demo/", fileName: "text", output: 'thing to write into' }); 

しかし、誰ファイルが作成されません。私は何がうまくいかないかを見つけるために何をデバッグするのか分からない。 ありがとうございます。

+0

http://php.net/features.file-upload – KingCrunch

+0

あなたのネストした 'isset()'は意味を持たず、致命的なエラーを引き起こすような匂いがします。それ以外に、本当に毎回 '== true'は必要ありません。それは暗黙のうちに追加され、コードを追加するだけです。 – ThiefMaster

+0

入れ子になっているisset()..何かが送信されているかどうかの確認に役立ちませんか?私はそれが正しい方法だと思った。ありがとうございました。 –

答えて

1

しかし、ファイルは作成されません。私は何がうまくいかないかを見つけるために何をデバッグするのか分からない。ありがとうございました。

fopen()に渡される引数をデバッグする必要があります。

+0

明示的な回答をいただきありがとうございます。私は素敵なものをいくつか学んだが、もう一つの答えは私が持っている現在の問題のためにもう少し手を差し伸べている。 –

+0

あなたは何を学びましたか? :) – jpic

+0

私は、ユーザーが "../"を含むパスにアクセスすることを許可すべきではないと理解しました。これは、ファイルツリー全体をブラウズし、重要なファイルを置き換える可能性があるからです。また、スクリプトが出力ファイルを含むフォルダだけにアクセスできるようにすることも非常に重要です。 私は私の学校からサーバー上で作業しており、 "http://students.school.com/~user/XML/"のようなドメインを持っていてbase_pathエコーは "/ servername"を返すので、私はbase_pathメソッドを使用しませんでした/ studs/user/html/XML " - >これはサーバからのファイルパスだと思います。 –

2

おそらく、これはアクセス権の問題です。コードをデバッグして、$ fpが実際に設定されているかどうかを確認してください。

また、このようなコードは、潜在的に非常に危険で、Webサーバーがアクセスできる場所でファイルを作成または置き換えることができます。 fileNameをサニタイズして、フルパスを自分で作成する必要があります。

//clean any nasties from the filename 
$filename=preg_replace('/[^a-z0-9]/i', '', $_GET['fileName']).'.txt'; 

//calculate a path relative to our document root... 
$filepath=$_SERVER['DOCUMENT_ROOT'].'/path/to/files/'.$filename; 
+0

まず、ありがとうございます。あなたはいくつかの非常に重要な問題を提起しました。私はステータスを更新します。 –

関連する問題