Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: file_exists and clearstatcache

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: После clearstatcache функция file_exists кешируется
Dexel
Отправлено: 16 Января, 2012 - 19:36:58
Post Id



Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Февр. 2011  


Помог: 0 раз(а)




Здравствуйте.
Вот такой простой фрагмент:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.         clearstatcache();
  3.         if (file_exists($file)) {
  4.                 unlink($file);
  5.         }
  6.  


Ситуация такая, что файл уже не существует. Функция же file_exists() выдаёт TRUE. Соответственно срабатывает unlink, и как следствие вываливается по ошибке.
Почему же не помогает clearstatcache() ?

PS. Собакой занулять ошибку в unlink() - не по моим правилам.

Файла там реально нет, но unlink норовит удалить его.
 
My status
 Top
sKaa
Отправлено: 16 Января, 2012 - 19:42:27
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]



Обратите внимание, что PHP не кэширует информацию о несуществующих файлах. Так что если вы вызовите file_exists() на несуществующем файле, она будет возвращать FALSE до тех пор, пока вы не создадите этот файл. Если же вы создадите файл, она будет возвращать TRUE даже если затем вы его удалите.

Юзай подавление ошибок.
PHP:
скопировать код в буфер обмена
  1.  
  2.         clearstatcache();
  3.         if (file_exists($file)) {
  4.                 @unlink($file);
  5.         }
  6.  
  7.  
 
 Top
Мелкий Супермодератор
Отправлено: 16 Января, 2012 - 19:53:58
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Какая платформа?
И что в $file?


-----
PostgreSQL DBA
 
 Top
Dexel
Отправлено: 18 Января, 2012 - 01:13:19
Post Id



Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Февр. 2011  


Помог: 0 раз(а)




Мелкий пишет:
Какая платформа?
И что в $file?


В $file - имя файла. Уже удалённого.
Платформа - Ubuntu 11.04.
PHP 5.2.6-1+lenny13 with Suhosin-Patch 0.9.6.2

Та не уж то нет нормального выхода из положения, кроме как занулить ошибку собакой Недовольство, огорчение

(Отредактировано автором: 18 Января, 2012 - 01:16:03)

 
My status
 Top
LIME
Отправлено: 18 Января, 2012 - 04:43:50
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




PHP:
скопировать код в буфер обмена
  1.  var_dump(stat($file));
  2.         if (file_exists($file)) {
  3.                 unlink($file);
  4.         }

(Отредактировано автором: 18 Января, 2012 - 04:45:03)

 
 Top
Dexel
Отправлено: 21 Января, 2012 - 08:43:45
Post Id



Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Февр. 2011  


Помог: 0 раз(а)




LIME пишет:
PHP:
скопировать код в буфер обмена
  1.  var_dump(stat($file));
  2.         if (file_exists($file)) {
  3.                 unlink($file);
  4.         }


Ошибка исчезла. Так ничего не делал вообще. Ну чудеса прям...
Вывод дампа сейчас (повторюсь: ошибка исчезла):

array
0 => int 2053
1 => int 1576880
2 => int 33188
3 => int 1
4 => int 33
5 => int 33
6 => int 0
7 => int 1103
8 => int 1327127896
9 => int 1327127895
10 => int 1327127895
11 => int 4096
12 => int 8
'dev' => int 2053
'ino' => int 1576880
'mode' => int 33188
'nlink' => int 1
'uid' => int 33
'gid' => int 33
'rdev' => int 0
'size' => int 1103
'atime' => int 1327127896
'mtime' => int 1327127895
'ctime' => int 1327127895
'blksize' => int 4096
'blocks' => int 8
 
My status
 Top
Dexel
Отправлено: 31 Марта, 2012 - 12:20:20
Post Id



Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Февр. 2011  


Помог: 0 раз(а)




LIME пишет:
PHP:
скопировать код в буфер обмена
  1.  var_dump(stat($file));
  2.         if (file_exists($file)) {
  3.                 unlink($file);
  4.         }


Вот, проявилось:
CODE (htmlphp):
скопировать код в буфер обмена
  1.   0 => int 2053
  2.   1 => int 1577410
  3.   2 => int 33188
  4.   3 => int 1
  5.   4 => int 33
  6.   5 => int 33
  7.   6 => int 0
  8.   7 => int 12715
  9.   8 => int 1333181654
  10.   9 => int 1333181650
  11.   10 => int 1333181650
  12.   11 => int 4096
  13.   12 => int 32
  14.   'dev' => int 2053
  15.   'ino' => int 1577410
  16.   'mode' => int 33188
  17.   'nlink' => int 1
  18.   'uid' => int 33
  19.   'gid' => int 33
  20.   'rdev' => int 0
  21.   'size' => int 12715
  22.   'atime' => int 1333181654
  23.   'mtime' => int 1333181650
  24.   'ctime' => int 1333181650
  25.   'blksize' => int 4096
  26.   'blocks' => int 32
  27.  
  28.   0 => int 2053
  29.   1 => int 1577411
  30.   2 => int 33188
  31.   3 => int 1
  32.   4 => int 33
  33.   5 => int 33
  34.   6 => int 0
  35.   7 => int 13418
  36.   8 => int 1333181653
  37.   9 => int 1333181651
  38.   10 => int 1333181651
  39.   11 => int 4096
  40.   12 => int 32
  41.   'dev' => int 2053
  42.   'ino' => int 1577411
  43.   'mode' => int 33188
  44.   'nlink' => int 1
  45.   'uid' => int 33
  46.   'gid' => int 33
  47.   'rdev' => int 0
  48.   'size' => int 13418
  49.   'atime' => int 1333181653
  50.   'mtime' => int 1333181651
  51.   'ctime' => int 1333181651
  52.   'blksize' => int 4096
  53.   'blocks' => int 32


Помогите пожалуйста
 
My status
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с файловой системой и файлами »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB