Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Не понимаю, ошибки


Автор: Shark 30.7.2015, 14:01
Код

<?php
$user="Users";
$address="1234";
$datayear = date('Y');
$data = date('d-m-Y');
if(!file_exists($user))
    { mkdir($user, 0777); }
else
    { chdir($user); }

if(!file_exists($datayear))
    { 
        chdir($user);
        mkdir($datayear, 0777); 
    }
else
    { chdir($datayear); }

if(!file_exists($data))
    { 
        chdir($datayear);
        mkdir($data, 0777); 
    }
else
    { chdir($data); }

if(!file_exists($address))
    { 
        chdir($data);
        mkdir($address, 0777); 
    }
else
    { chdir($address); }
?>

Проблема в том, что изначально папки создаются без ошибки. Потом если поменять адрес, выскакивает ошибка (предупреждение):
Warning: chdir() [function.chdir]: No such file or directory (errno 2) in Z:\home\localhost\www\test\index.php on line 29
при этом, папка с названием адреса создается. Как избавится от ошибки?

Автор: ksnk 30.7.2015, 14:08
Код

...
else
    { chdir($data); }
if(!file_exists($address))
    { 
        chdir($data);
        mkdir($address, 0777); 
    }

Тоесть сначала проверяется, есть ли каталог $data, он создается-переходится, а потом, на 29 строке есть еще одна команда перехода. Куда? В каталог $data/$data ?
Цитата(Shark @  30.7.2015,  14:01 Найти цитируемый пост)
 Как избавится от ошибки?

закомментиовать 29 строку?  smile 

Автор: Shark 30.7.2015, 17:03
ksnk, я все понимаю, но если закоментировать (или удалить строку 29), возникает другая проблема... если на этом пользователе каталоги не созданы, то в каталоге $datayear создается 2(!) каталога, с $data и $address

P.S. И почему в таком случае предупреждение выводится на 29 строке, а не раньше?

Автор: ksnk 30.7.2015, 18:24
Вот смотри на свой первый же условный оператор 
Код

$user="Users";
...
if(!file_exists($user))
    { mkdir($user, 0777); }
else
    { chdir($user); }


Если мы пойдем по первой ветке, то создадим каталог. И останемся в каталоге-родителе.
Ели пойдем  по второй ветке - перейдем в каталог.

Не видишь ошибку в логике?

ветка else лишняя?

Автор: Shark 30.7.2015, 19:08
ksnk, я не понимаю к чему ты клонишь smile.. прости...
Запусти вирутальный сервер.. и создай там index.php с кодом выше.. потом запусти файл, и посмотри, что будет в папке с этим файлом. Будет все правильно. После этого, поменяй $address и нажми F5, либо снова в адресной строке вбей адрес и нажми интер. Будет предупреждение!..
Вопросы: 
1. Раз он при смене $address ругается на chdir($data), почему, нет "ругани" на chdir($datayear) и предыдущие?
2. возьмем кусок, из-за которого появляется предупреждение:
Код

if(!file_exists($address))
    { 
        chdir($data);
        mkdir($address, 0777); 
    }
else
    { chdir($address); }

с 27 строки по 33
..
получается, если не существует каталога $address в каталоге $data (в который мы спокойно перешли в предыдущем шаге), то переходим в каталок $data (на который почему-то "ругается код") и создаем каталог с новым адресом.

P.S. Сорри за тупость... я бы не спрашивал, если бы он ругался на предыдущие каталоги при переходе в них

Автор: ksnk 30.7.2015, 21:24
Код

$user="Users";
...
if(!file_exists($user))
    { mkdir($user, 0777); }
chdir($user);

Вот я переписал кусок как он , imho, должен был быть. Чем он отличается от того, что был?

К 29-й строке, на которой делается попытка chdir, УЖЕ был переход в этот каталог на строке 25. 

Автор: Shark 31.7.2015, 06:02
По твоей подсказке
Цитата

К 29-й строке, на которой делается попытка chdir, УЖЕ был переход в этот каталог на строке 25. 

переписал код так:
Код

<?php
$user="Users";
$address="10rtyjyd2";
$datayear = date('Y');
$data = date('d-m-Y');
if(!file_exists($user))
    { 
        mkdir($user, 0777);
        chdir($user);
    }
else
    { chdir($user); }

if(!file_exists($datayear))
    { 
        mkdir($datayear, 0777); 
        chdir($datayear);
    }
else
    { chdir($datayear); }

if(!file_exists($data))
    { 
        mkdir($data, 0777); 
        chdir($data);
    }
else
    { chdir($data); }

if(!file_exists($address))
    { 
        mkdir($address, 0777); 
        chdir($address); 
    }
else
    { chdir($address); }

?>

и все стало прекрасно работать.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)