2014-12-16 3 views
3

У меня есть простая функция AJAX который вызывается, когда пользователь нажимает кнопку, которая отправляет текст HTML текстового поля и предупреждает ответ от внутреннего интерфейса:Php Fread() функция не возвращает ничего

send_button.onclick = function() 
{ 
    var ajax = new XMLHttpRequest(); 
    var text = text_input.value; 
    ajax.onreadystatechange = function() 
    { 
     if (ajax.readyState == 4 && ajax.status == 200) alert(ajax.responseText); 
    }; 
    ajax.open("POST", "write.php", true); 
    ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
    ajax.send("text=" + text); 
}; 

а как PHP скрипт на внутреннем интерфейсе, который предполагается записать полученный текст в файл и эхо содержимого файла:

<?php 

    $filename = "preview/preview.html"; 
    $text = (isset($_POST["text"]) ? $_POST["text"] : ""); 

    try 
    { 
     $fh = fopen($filename, "w+"); 
     if (!$fh) throw new Exception("File open error"); 

     fwrite($fh, $text); 

     $filetext = (filesize($filename) > 0 ? fread($fh, filesize($filename)) : ""); 
     echo $filetext; 

     fclose($fh); 
    } 
    catch (Exception $e) 
    { 
     header("Location: error.php"); 
    } 

?> 

Но каждый раз, когда ответ пуст. Я попытался повторить строчную строку вместо fread(), и это сработало, я также попытался эхом ответить filesize($filename), который отлично работал.
Данные POST, отправленные функцией AJAX, также проходят, и функция fwrite($fh, $text) выполняет именно то, что она должна.
Что я делаю неправильно?

ответ

1

Вы не перемотать файл:

  1. вы открыть файл для записи
  2. вы выписывать какой-нибудь текст - файл указатель на конец файла
  3. вы пытаетесь прочитать некоторые текст из файла, но указатель на конец файла
  4. данных не читается, поэтому выход пустая строка

Почему бы не использовать что-то больше, как это:

file_put_contents('preview/preview.html', $_POST['text'], FILE_APPEND); 
readfile('preview/preview.html'); 

«не может прочитать файл» все хорошо и денди, но все открытия/записи/чтения бизнес является избыточным и может быть сведена к выше двух строк кода.

+0

Спасибо за объяснение! Я приму свой ответ, как только это позволит мне ^^ – Parzival

0

Вместо этого вы можете использовать $filetext = file_get_contents($filename);. Я думаю, что вы переместили указатель файла до конца после записи в нем, так что вы видите только символ конца файла.

0

Вы можете использовать file_get_contents ($ file_name)