2017-02-14 2 views
4

Я написал код ниже, на данный момент я тестирую, поэтому в коде нет запросов к базе данных.filesize() всегда читает 0 байтов, хотя размер файла не равен 0 байтам

Код ниже, где указано if(filesize($filename) != 0), всегда относится к else, хотя файл не является 0 байтами и содержит 16 байтов данных. Я ничего не получаю, всегда кажется, что файл равен 0 байтам.

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

$filename = 'memberlist.txt'; 
$file_directory = dirname($filename); 
$fopen = fopen($filename, 'w+'); 

// check is file exists and is writable 
if(file_exists($filename) && is_writable($file_directory)){ 

    // clear statcache else filesize could be incorrect 
    clearstatcache(); 

    // for testing, shows 0 bytes even though file is 16 bytes 
    // file has inside without quotes: '1487071595 ; 582' 
    echo "The file size is actually ".filesize($filename)." bytes.\n"; 

    // check if file contains any data, also tried !== 
    // always goes to else even though not 0 bytes in size 
    if(filesize($filename) != 0){ 

     // read file into an array 
     $fread = file($filename); 

     // get current time 
     $current_time = time(); 

     foreach($fread as $read){ 
      $var = explode(';', $read); 
      $oldtime = $var[0]; 
      $member_count = $var[1]; 
     } 
      if($current_time - $oldtime >= 86400){ 
       // 24 hours or more so we query db and write new member count to file 
       echo 'more than 24 hours has passed'; // for testing 

      } else { 
       // less than 24 hours so don't query db just read member count from file 
       echo 'less than 24 hours has passed'; // for testing 
      } 
    } else { // WE ALWAYS END UP HERE 
     // else file is empty so we add data 
     $current_time = time().' ; '; 
     $member_count = 582; // this value will come from a database 
     fwrite($fopen, $current_time.$member_count); 
     fclose($fopen); 
     //echo "The file is empty so write new data to file. File size is actually ".filesize($filename)." bytes.\n"; 
    } 

} else { 
    // file either does not exist or cant be written to 
    echo 'file does not exist or is not writeable'; // for testing 
} 

В основном код будет на странице списка участников, который в настоящее время извлекает всех членов и подсчитывает, сколько участников зарегистрировано. Точка в скрипте, если время меньше 24 часов, мы читаем member_count из файла else, если прошло 24 часа или более, мы запрашиваем базу данных, получаем кол-во членов и записываем новую цифру в файл, чтобы уменьшить запросы на Страница участника.

Update 1:

Этот код:

echo "The file size is actually ".filesize($filename)." bytes.\n";

всегда выводит ниже, даже если это не 0 байт.

Размер файла на самом деле составляет 0 байт.

также попытался

var_dump (filesize($filename));

Выходы:

Int (0)

+0

сделали вы проверили 'var_dump (Filesize ($ файла));'? показать нам –

+0

@Anant я получаю: int (0) приветствия. – PHPLOVER

+0

@apokryfos У меня нет этого кода в моем скрипте, не уверен, что вы имеете в виду здесь, весь скрипт выше. Обновлено сообщение с дополнительной информацией. Приветствия. – PHPLOVER

ответ

8

Вы используете:

fopen($filename, "w+") 

Согласно ручной w+ означает:

Открыть для чтения и записи; поместите указатель файла в начало файла и обрезайте файл до нулевой длины. Если файл не существует, попытайтесь его создать.

Таким образом, размер файла равен 0.

Вы, вероятно, нужно r+

+0

Привет, $ fopen = fopen ($ filename, 'w +'); присваивается переменной $ fopen и не вызывается, если там нет данных. – PHPLOVER

+0

Вы обряд, извините, теперь он работает, я извиняюсь. Большое спасибо. – PHPLOVER

+0

Не могу поверить, что я провел несколько часов, разбивая голову о стену (не буквально).Я также проверил руководство по php и все еще пропустил то, что вы цитировали из руководства php, пока я не проверил еще раз. r + был тем, который мне нужен. Спасибо. – PHPLOVER