PHP File Write - сообщение об ошибке каждый раз

Итак, вот мой код, продолжающий попадать в мое сообщение об ошибке, возился с разрешениями, но не повезло, есть идеи?

<?php
//create variables
$first_name = (int) $_POST['first_name'];
$last_name = (int) $_POST['last_name'];
$document_root = $_SERVER['/var/www'];
$date = date('H:i, jS F Y');
?>
<DOCTYPE html>
<html>
<head>
    <title>We get the message...</title>
</head>
<body>
    <h1>We get the message . . .</h1>
    <?php
        $output_string = $date."\t".$first_name.$last_name."   \t".$message."\n";
        @$fp = fopen("$document_root-messages.txt", 'w+');
        if (!$fp) {
            echo "<p>apologies</p>";
            exit;
        }
        flock($fp, LOCK_EX);
        fwrite($fp, $output_string, strlen($output_string));
        flock($fp, LOCK_UN);
        fflush($fp);
        fclose($fp);

        echo "<p>message written.</p>";
    ?>
</body>
</html>

Я только начинаю изучать PHP, так что, возможно, это что-то действительно простое, но я почесал голову около часа и до сих пор не нашел решения.

1 ответ

@$fp = fopen("$document_root-messages.txt", 'w+');

Вы на самом деле не указали путь, такого файла нет:

/var/www-messages.txt

Теперь это реальный путь:

@$fp = fopen("$document_root/messages.txt", 'w+');

И я предполагаю, что вы имели в виду, предполагая, что файл в /var/www является message.txt.

Комментарии о плохой практике создания /var/www-записи также правильны, лучше всего учиться начинать с хороших, так как если вы начинаете с плохих, вам все равно придется их отучить, и это больше работы.

Чтобы избежать этого, нужно просто привыкнуть к ясности, вот так:

$file_path = $document_root . '/messages.txt';
echo $file_path . '<br>';
@$fp = fopen($file_path, 'w+');

Затем вы избавляетесь от эха после того, как он работает, эхо также является хорошим советом. Если вы привыкли запихивать все действия внутри чего-то, отладку очень сложно, если вы строите свои строки вне, скажем, fopen, то вы можете отладить путь, повторив его, и вы не запутаетесь. Заметьте, насколько это понятно и как легко отлаживать?

Другие вопросы по тегам