Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: ОЧЕНЬ странный глюк sizeof(glob());
 
 автор: amigo62   (01.09.2008 в 11:57)   письмо автору
 
 

Приветствую собратьев по оружию:) Есть вот такой скрипт:
<?php
error_reporting
(E_ALL);
print_r(glob("files/*.{jpg,jpeg,png,gif}",GLOB_BRACE));
echo 
'<br>';
print_r(glob("files/*",GLOB_ONLYDIR));
?>

(читает сначала картинки, потом папки в директории files).
Директория пуста, и на сервере, и на локальном компе. НО!
Домашний комп выводит
Array()<br>Array(),
а сервер только <br>!
Сделал так:
<?php
error_reporting
(E_ALL);
echo 
sizeof(glob("files/*.{jpg,jpeg,png,gif}",GLOB_BRACE));
echo 
'<br>';
echo 
sizeof(glob("files/*",GLOB_ONLYDIR));
?>

(посмотреть размер массивов),
Домашний комп выводит
0
0
а сервер
1
1
(!!!) и это при том, что директория пуста, а print_r не показал ничего!
Создаю папку 111. Запускаю скрипт №1
Денвер:
Array ( )
Array ( [0] => files/1111 )

Сервер:

Array ( [0] => files/1111 )
казалось бы все ок. но скрипт №2 дает результаты:
Денвер:
0
1
Сервер:
1
1

Дальнейшие тесты показали: sizeof(glob()); всегда возвращает число больше 0
В чем дело? почему считает так?

  Ответить  
 
 автор: Trianon   (01.09.2008 в 12:07)   письмо автору
 
   для: amigo62   (01.09.2008 в 11:57)
 

попробуйте вместо sizeof написать count
а вместо print_r соответственно var_dump

  Ответить  
 
 автор: amigo62   (01.09.2008 в 13:06)   письмо автору
 
   для: Trianon   (01.09.2008 в 12:07)
 

count так же возвращает 1 / 1 при отсутствии обьектов, а var_dump - bool(false) / bool(false)

  Ответить  
 
 автор: waptanet   (01.09.2008 в 13:49)   письмо автору
 
   для: amigo62   (01.09.2008 в 13:06)
 

помоему всё просто ... стоит только повнимательнее прочитать описание используемых функций


Описание

int count ( mixed var)

...

Если var это не массив, будет возвращено 1.


косяк в том что вы пытаетесь посчитать не массив ....

по поводу того что print_r печатает 1 ... скорее всего нужно просто писать print_r а не echo print_r()

:-)

  Ответить  
 
 автор: waptanet   (01.09.2008 в 13:53)   письмо автору
 
   для: amigo62   (01.09.2008 в 13:06)
 

ЗЫ:

функция glob скорее всего возврощает FALSE (заметим,это не массив) .. отсюда и проблема

  Ответить  
 
 автор: amigo62   (01.09.2008 в 14:16)   письмо автору
 
   для: waptanet   (01.09.2008 в 13:53)
 

>по поводу того что print_r печатает 1 ... скорее всего нужно просто писать print_r а не echo print_r()
читайте внимательнее ;)

>Описание

int count ( mixed var)

...

Если var это не массив, будет возвращено 1.



косяк в том что вы пытаетесь посчитать не массив ....
>хм. странно. возвращает 0 везде, кроме нового сервера... Это какая версия РНР подразумевается?

  Ответить  
 
 автор: waptanet   (01.09.2008 в 14:52)   письмо автору
 
   для: amigo62   (01.09.2008 в 14:16)
 

http://ru2.php.net/count

  Ответить  
 
 автор: amigo62   (01.09.2008 в 14:52)   письмо автору
 
   для: waptanet   (01.09.2008 в 13:53)
 

Спасибо, что обратили внимание на тип переменной.
<?
$b
=glob("files/*",GLOB_BRACE);
if(
$b==false)
$b=array();
echo 
count($b);
?>

работает!!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования