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
Форумы портала PHP.SU :: Версия для печати :: file_exists and clearstatcache
Форумы портала PHP.SU » » Работа с файловой системой и файлами » file_exists and clearstatcache

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

1. Dexel - 16 Января, 2012 - 19:36:58 - перейти к сообщению
Здравствуйте.
Вот такой простой фрагмент:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.         clearstatcache();
  3.         if (file_exists($file)) {
  4.                 unlink($file);
  5.         }
  6.  


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

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

Файла там реально нет, но unlink норовит удалить его.
2. sKaa - 16 Января, 2012 - 19:42:27 - перейти к сообщению

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

Юзай подавление ошибок.
PHP:
скопировать код в буфер обмена
  1.  
  2.         clearstatcache();
  3.         if (file_exists($file)) {
  4.                 @unlink($file);
  5.         }
  6.  
  7.  
3. Мелкий - 16 Января, 2012 - 19:53:58 - перейти к сообщению
Какая платформа?
И что в $file?
4. Dexel - 18 Января, 2012 - 01:13:19 - перейти к сообщению
Мелкий пишет:
Какая платформа?
И что в $file?


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

Та не уж то нет нормального выхода из положения, кроме как занулить ошибку собакой Недовольство, огорчение
5. LIME - 18 Января, 2012 - 04:43:50 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  var_dump(stat($file));
  2.         if (file_exists($file)) {
  3.                 unlink($file);
  4.         }
6. Dexel - 21 Января, 2012 - 08:43:45 - перейти к сообщению
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
7. Dexel - 31 Марта, 2012 - 12:20:20 - перейти к сообщению
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


Помогите пожалуйста

 

Powered by ExBB FM 1.0 RC1