Как сохранить файл * .txt с PHP по определенному пути? - PullRequest
0 голосов
/ 17 марта 2012

Я пытаюсь написать простой скрипт PHP, который записывает строку в файл .txt.Просто.Для этого у меня есть это:

<?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. Может ли этот путь быть относительным путем?(я просто отправляю "/ output /" и сохранение будет выполнено, как и ожидалось).

Спасибо.

Теперь я здесь:

<?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' });

Но файл не создается.Я не знаю, что отлаживать, чтобы выяснить, что не так.Спасибо.

Ответы [ 2 ]

2 голосов
/ 17 марта 2012

Вы, вероятно, обнаружите, что это проблема с разрешениями - отладьте свой код, чтобы увидеть, действительно ли установлен $ fp.

Кроме того, подобный код потенциально очень опасен, позволяя создавать или заменять файлы где угодновеб-серверу разрешен доступ.Вы должны очистить 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;
1 голос
/ 17 марта 2012

Но файл не создан. Я не знаю, что отлаживать, чтобы выяснить, что не так. Спасибо.

Вы должны отладить аргумент, который передается в fopen ().

...