is_file и is_dir под Windows+Apache

usascha

Новичок
is_file и is_dir под Windows+Apache

Пытаюсь использовать в цикле is_file и is_dir в скрипте, выполняемом в Win:

PHP:
if (is_file($file)) {
	$razmer = filesize($file);
	$razmer = round($razmer/1024,2);
...
}
Всегда возвращает false. is_dir аналогично.

Это потому что под Windows или при смешивании папок и файлов в одной папке функция как-то по особенному отрабатывает?

Если все дело в оси, то как можно заменить?
 

DiMA

php.spb.ru
Команда форума
кривые руки и ничего более, с виндой, пхп и этими функциями все нормально
и с любыми слешами
 

usascha

Новичок
Вот код. Что в нем кривого?
PHP:
$dir="fun";
$opendir=opendir($dir);
echo "<table align=\"center\" border=1 width=\"100%\"><tr>";
while ($file = readdir($opendir)) {
		if( ($file !== ".") && ($file !== "..") && ($file !== "index.php") && (!is_dir($file)) ) {
			if (is_file($file)) {
				$razmer = filesize($file);
				$razmer = round($razmer/1024,2);
				echo "<td align=center><li><nobr><a href=\"$dir/$file\">".$file." </a>-[".$razmer." Kb]</nobr>";
			} else {
				echo "<td align=center><li><nobr><a href=\"$dir/$file\">".$file." </a>";
			}
...
Всегда выводит на экран только названия и не показывает размер.
 

Yaponchick

Новичок
Input filename must be FULL(from root).
Enough, noob ?!

P.S. U can add all ur directories to PATH environment variable :D
P.S. is_file(getcwd().'/fun/'.$file)
 

usascha

Новичок
Я понял замечание.
Но на сервере под unix такой код работает без каких-то там полных путей.

И вот эта страшная вещь - is_file(getcwd().'/fun/'.$file) - мне понятна, пошел пробовать. Но как-то раньше-то жил без нее :-/



А что в этом коде неверно?
if(is_file($file)) {...}
 

mani13

Новичок
usascha
Скажу по-другому, код проверяет не то, что вы хотите.
 

Yaponchick

Новичок
Окей, скажу по русски:
print $file -> выведет имя файла ?
окей, file_exists($file) -> проверит в ДОСТУПНЫХ ПАПКАХ, но не будет искать ИМЯ файла во всех других папках.
Поэтому, если ты пишешь is_file($file) - допустим он проверит в родной папке. но файл-то в папке fun/.
Ясно ?

Example:
$dir = ".";

и посмотри что будет.

mani13
Опыт показал.
 

usascha

Новичок
Автор оригинала: mani13
usascha
Скажу по-другому, код проверяет не то, что вы хотите.
Тогда я ничего не понял. А что этот код проверяет?

По мне, логика понятная:
- выбирается папка, открывается, читается.
- пока выводится список файлов (кот., не дб. равны тем условиям) надо вставить каждый из них в ячейку таблицы)
и закрыть таблицу.

Если верить выводу сообщений об ошибках, то файлы и папки не понимаются ни как папки, ни как файлы. :confused:


yaponchik, у меня эти два варианта выдают одно и тоже:
if (is_file($file))
if(is_file(getcwd().'fun/'.$file))
 

serglt

Анус, ой, Ахтунг
is_dir($dir . $file)
is_file($dir . $file)
filesize($dir . $file)
Добавь во все фаЙловые функции имя папки которую открыл.
А то как маленький Петя :)
 

Gorynych

Посетитель PHP-Клуба
usascha
Код:
$dir="fun";
$opendir=opendir($dir);
...
while ($file = readdir($opendir)) {
opendir(...) возвращает вам указатель на ресурс

readdir(...) - следующее по списку имя файла(директории) из директории с именем $dir но НЕ переходит в эту директорию. ПОЭТОМУ ф-ии is_file(..) и is_dir(...) возвращают ЛОЖЬ.

образно говоря Вы получаете ИМЯ файла index.php из директории fun (т.е. fun\index.php), а проверяете файл ли это для файла index.php из текущего каталога :)

измените ваш код так:
Код:
...
$opendir = opendir($dir);
while ($file = readdir($opendir)) {
    // добавляем путь к каталогу
    $file = $dir."/".$file;
    if( ($file !== "index.php") && (!is_dir($file)) ) {
        // убираем путь к каталогу из печати
        $file = str_replace($dir."/", '', $file);
        ...
    }
}
и он заработает. Проверка ($file !== ".") && ($file !== "..") - лишняя. В этом смысле достаточно !is_dir($file)
 
Сверху