[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: не работает file_exists()
maxsim1982i
Здраствуйте, почему то функция определения существования файла не работает правильно, видимо что-то где-то напутал с кодом, подскажите пожайлуста.

<?
session_start();
$dir=opendir("data/$nomer")or die ("error");
chdir("data/$nomer");
$i=0;
$sms=0;
while ($d=readdir($dir))
{
if (is_dir($d)) {$papka[$i]=$d;$i++;}
}
closedir($dir);
$j=2;
while ($j<=$i);
{
if (file_exists("data/$nomer/$papka[$j]/inbox.ktk")) {echo "файл существует<br>";$sms++;}
$j++;
}
echo "у вас coобщений ".$sms."<br>$nomer<br>";
?>




Спустя 16 минут, 35 секунд (19.03.2009 - 09:00) Sylex написал(а):
код надо красивей оформлять, массивы заранее определять:
PHP
<?
session_start();
$dir opendir("data/$nomer") or die ("error");
chdir("data/$nomer");
$i 0;
$sms 0
$papka = array(); // массивы лучше определять заранее
while ($d readdir($dir))
{
    if (
is_dir($d)) {$papka[$i] = $d$i++;}
}
closedir($dir);
$j 2;
while (
$j <= $i);
{
    if (
file_exists("data/$nomer/".$papka[$j]."/inbox.ktk")) { echo "файл существует<br>"$sms++; }
    
$j++;
}
echo 
"у вас coобщений ".$sms."<br>$nomer<br>";


но вообще мутно, конечно....

если массив используете внутри кавычек - лучше делать конкатенацию, или брать в фигурные скобки {}

Спустя 58 секунд (19.03.2009 - 09:01) kirik написал(а):
Пиши аккуратнее, чтобы не путаться.

PHP
session_start();

$dir opendir("data/$nomer") or die ("error");
chdir("data/$nomer");

$i 0;
$sms 0;

while(
$d readdir($dir))
{
    if(
is_dir($d))
    {
        
$papka[$i] = $d;
        
$i++;
    }
}
closedir($dir);

$j 2;

while(
$j <= $i);
{
    if(
file_exists("data/$nomer/".$papka[$j]."/inbox.ktk"))
    {
        echo 
"файл существует<br>";
        
$sms++;
    }
    
$j++;
}

echo 
"у вас coобщений ".$sms."<br>$nomer<br>";


Ошибка тут $papka[$j]. Если в запрашиваешь индекс массива переменной, то нужно пользоваться конкатенацией. Заменил на ".$papka[$j].".

Спустя 1 минута, 58 секунд (19.03.2009 - 09:03) kirik написал(а):
biggrin.gif Нада какой-нибудь плагин к форуму, чтобы отвечающий нажимал кнопку, и все видели что кто-то уже на этот топик отвечает. smile.gif

Спустя 1 минута, 17 секунд (19.03.2009 - 09:04) Sylex написал(а):
kirik
жесть laugh.gif

Спустя 21 минута, 56 секунд (19.03.2009 - 09:26) maxsim1982i написал(а):
Все равно не работает
задача скрипта проста, не обходимо в паке data проверить все папки на существования файла inbox.ktk и вывести количество найденых файлов

Спустя 5 часов, 4 секунды (19.03.2009 - 14:26) maxsim1982i написал(а):
Все больше нет шарющих? Кто подскажет как сделать?

Спустя 1 час, 54 минуты, 18 секунд (19.03.2009 - 16:20) waldicom написал(а):
читать тут и комменты там же

Спустя 11 минут, 42 секунды (19.03.2009 - 16:32) Viking написал(а):
Цитата
Все больше нет шарющих? Кто подскажет как сделать?

а что толку подсказывать, если у тебя там "Все равно не работает" и неизвестно что именно неработает, может у тебя пхп неправильно настроено smile.gif
сообщения об ошибках есть?

Спустя 18 минут, 48 секунд (19.03.2009 - 16:51) sergeiss написал(а):
Цитата (maxsim1982i @ 19.03.2009 - 14:26)
Все больше нет шарющих? Кто подскажет как сделать?

Ну, я "шАрющий", я подскажу smile.gif Алгоритм такой.
1. Надо сделать простое действие - подумать самому.
2. Сделать контрольные распечатки внутри цикла, посмотреть, что там происходит.
3. Опять подумать.
4. Если не помогает, прийти опять сюда, но уже с кодом, и спросить: почему вот этот вот измененный код не работает.
5. А учитывая, что тут, как и на любом другом форуме, отвечать никто никому не обязан, то можно бы и повежливее вопросы такие задавать. Не типа того, что я процитировал, а намного вежливее.
6. Приведенный пример можно укоротить существенно, проводя проверку сразу в одном цикле: если найденный элемент является каталогом, то не записывать его имя в массив, а сразу же тут же анализировать наличие файла.
7. И как правильно заметил Viking, если есть ошибки, то покажи, что именно пишется.

Спустя 23 часа, 17 минут, 36 секунд (20.03.2009 - 16:09) maxsim1982i написал(а):
вот все сделал в одном цикле но теперь условие с функцией file_exists всегда верно даже если файла не существует. в чем может быть дело подскажите

<?
session_start();

$dir = opendir("data/$nomer") or die ("error");
chdir("data/$nomer");

$i = 0;
$sms = 0;

while($d = readdir($dir))
{
if(is_dir($d))
{
if (file_exists("data/$nomer/$d/inbox.ktk")) ;{ echo "файл существует ".$d."<br>";$sms++;}
}
}


echo "у вас coобщений ".$sms."<br>$nomer<br>";
?>


Спустя 16 минут, 45 секунд (20.03.2009 - 16:25) Viking написал(а):
Цитата
if (file_exists("data/$nomer/$d/inbox.ktk")) ;{ echo "файл существует ".$d."<br>";$sms++;}

Спустя 37 минут, 33 секунды (20.03.2009 - 17:03) maxsim1982i написал(а):
Точно в этом тоже была ошибка её исправил теперь функция не работает даже если файл сущесвует она все равно его не видит

Спустя 20 минут, 34 секунды (20.03.2009 - 17:23) Viking написал(а):
дык chdir("data/$nomer"); убери

Спустя 8 минут, 57 секунд (20.03.2009 - 17:32) maxsim1982i написал(а):
убрал, но изменений ни каких.

Спустя 5 минут, 13 секунд (20.03.2009 - 17:38) Viking написал(а):
а $nomer у тебя откуда берется?

Спустя 7 минут, 24 секунды (20.03.2009 - 17:45) maxsim1982i написал(а):
это сесионная переменная

Спустя 16 минут, 49 секунд (20.03.2009 - 18:02) Viking написал(а):
т.е. у тебя register_globals = On ??? фуу....
PHP
<?
// session_start();
$nomer=1;
$dir = opendir("data/$nomer") or die ("error");


$i = 0;
$sms = 0;

while(
$d = readdir($dir))
{
if(
is_dir($d))
{
if (file_exists("data/$nomer/$d/inbox.ktk")) { echo "файл существует ".$d."<br>";$sms++;}
}
}


echo "у вас coобщений ".$sms."<br>$nomer<br>";<

такой код рабочий 100%, хотя за счет того, что readdir() считывает "." в качестве директории, количество сообщений получается на единицу больше
есть еще вариант что у тебя доступ неправильно настроен

Спустя 10 минут, 23 секунды (20.03.2009 - 18:12) maxsim1982i написал(а):
register_globals включена $nomer получает значения все вроде правильно, но что-то не работает. Причем если просто написать: без цикла и открытия каталога функция file_exists работает правильно

Спустя 35 минут, 41 секунда (20.03.2009 - 18:48) maxsim1982i написал(а):
все всем спасибо кто не остался равнодушным к проблеме. решение найдено

<?
session_start();

$dir = opendir("data/$nomer") or die ("error");
chdir("data/$nomer");

$i = 0;
$sms = 0;

while($d = readdir($dir))
{
if(is_dir($d))
{
$d=trim($d);
if (file_exists("$d/inbox.ktk")) { echo "файл существует ".$d."<br>";$sms++;}
} echo $d."<br>";
}


echo "у вас coобщений ".$sms."<br>$nomer<br>".$name;
?>


Спустя 1 минута, 41 секунда (20.03.2009 - 18:50) sergeiss написал(а):
Цитата (Viking @ 20.03.2009 - 18:02)
if (file_exists("data/$nomer/$d/inbox.ktk")) ;{ echo "файл существует ".$d."<br>";$sms++;}

Я тут сидел над этим кодом, медитировал, медитировал... Викингу - два с минусом wink.gif

Вопрос: что делает точка с запятой перед открывающей фигурной скобкой в процитированном мной коде??? biggrin.gif biggrin.gif biggrin.gif

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

Спустя 1 час, 42 минуты, 11 секунд (20.03.2009 - 20:32) Viking написал(а):
sergeiss
видимо плохо медитируешь wink.gif я как раз имел ввиду, что ее там не должно быть, вроде вполен очевидно, или я тебя не так понял?

Спустя 6 минут, 33 секунды (20.03.2009 - 20:38) sergeiss написал(а):
Я не хочу "наезжать", а так, чисто приколу ради smile.gif Но этот код снабжен у тебя комментарием "такой код рабочий на 100%" smile.gif - это в сообщении в 18:02, часть которого у меня была процитирована.

...На всякий случай потребую с тебя пЫво biggrin.gif

PS. Эй, нечестно редактировать!!!

Всё, я обиделся и пошел дегустировать коньяк. Мелкими дозами. tongue.gif

Спустя 4 минуты, 3 секунды (20.03.2009 - 20:42) Viking написал(а):
Цитата
Я не хочу "наезжать", а так, чисто приколу радиНо этот код снабжен у тебя комментарием "такой код рабочий на 100%"- это в сообщении в 18:02, часть которого у меня была процитирована.

...На всякий случай потребую с тебя пЫво

да, действительно, случайно туда попала, исправил, теперь код рабочий.
молодец, хорошо медитируешь, с меня пиво smile.gif

Спустя 3 часа, 45 минут, 33 секунды (21.03.2009 - 00:28) Viking написал(а):
Цитата
PS. Эй, нечестно редактировать!!!

Всё, я обиделся и пошел дегустировать коньяк. Мелкими дозами.

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

Спустя 6 часов, 30 минут, 31 секунда (21.03.2009 - 06:58) modobaks написал(а):
while($d = readdir($dir))
{
if(is_dir($d))
{
$sms = count( glob( $d . "inbox.ktk" ) );
}
}

это точно должно помочь smile.gif

Спустя 16 дней, 3 часа, 6 минут, 7 секунд (7.04.2009 - 09:04) glock18 написал(а):
Еще интересно?

Вообще исходя из того что я помню еще, я бы посоветовал следующее:

1. file_exists("$d/inbox.ktk") - убрать data/$nomer
или
2. file_exists("с://.../data/$nomer$d/inbox.ktk") - указать полный путь
или
3. если и здесь работать не будет, то может какая-то байда с правами доступа на файл (я где-то читал, что в этом случае file_exists возвращает false).
В этом случае можно попробовать использовать заменители типа (is_executable и т.п.)

ЗЫ: так же еще есть несколько вариантов решения вовсе без file_exists.

Спустя 3 месяца, 23 дня, 4 часа, 49 минут, 35 секунд (30.07.2009 - 13:54) Алекс написал(а):
<?php
session_start();

$dir = opendir("data/".$nomer) or die ("error");
chdir("data/".$nomer);

$i = "0";
$sms = "0";

while($d = readdir($dir))
{
if(is_dir($d))
{
if (file_exists("data/".$nomer."/".$d."/inbox.ktk"))
{
echo "файл существует ".$d."<br>";
$sms++;
}
}
}


echo "у вас coобщений ".$sms."<br>".$nomer."<br>";
?>

А вообще нафига переменная i, не понятно... ты ж её нигде здесь не используешь?


_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.