Welcome to PHPClub
Переходим на PHP 5.3.3! Ищем хорошего PHP-разработчика Москва,
офис ~90-150К
Боишься нашего дизайна?
поиск:
   
 Начало | Настройки | Расширенный поиск | РегистрацияПосмотреть новые сообщения 
  
PHP Club форумы: > Вопросы по программированию на РНР > почему при использовании die валится реквай
Страниц (3): [1] 2 3 » |  

Автор
Тема ОТВЕТИТЬ
kotlf
Новичок

На форуме с: Sep 2007
Cообщений: 13
Город:
почему при использовании die валится реквай

ситуация такая - мы недавного с одного сервера на другой перенесли несколько сайтов. все работают нормально кроме одного
после тестирования выяснилось что валиться он на такой строчке
require_once($filename) or die("cannot find file");

мы думали что что-то нетак с рекаваем но всё н ормально и пути правильные и с файлом подключаемым всё ок. оказалось если заокметарить дай и оставить только require_once($filename); то всё нормально и сайт отлично работает. не понимаю какое влияние дай имеет на реквай и почему в ошибке фигурирует "1" если $filename содержит корректный абсолютный путь к файлу, который без or die("cannot find file") нормально подключается.

вот текст ошибки который мы наблюдали при тестировании:
Warning: require_once(): failed to open stream: No such file or directory in /XXX/index.php on line 144
Fatal error: require_once(): Failed opening required '1' (include_path='.:/usr/local/lib/php') in /XXX/index.php on line 144

Old Post 04.09.07 07:49 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
Фанат
oncle terrible

На форуме с: Jul 2003
Cообщений: 33557
Город: Broomfield, United States

echo $filename;

Old Post 04.09.07 07:52 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
kotlf
Новичок

На форуме с: Sep 2007
Cообщений: 13
Город:

 
Автор оригинала: *****
echo $filename;


эхо выводит правильный путь к файлу. та даже если не использовать переменную а забить путь руками всё равно происходит таже фигня.

Old Post 04.09.07 08:31 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
Фанат
oncle terrible

На форуме с: Jul 2003
Cообщений: 33557
Город: Broomfield, United States

если написать тестовый скрипт из одной строчки с нужным require, то он отработает, как я понимаю, без ошибок?
если нет, то полный текст скрипта и все сообщения об ошибках - сюда.
если да - то ищем опечатки в основном крипте.

Old Post 04.09.07 08:34 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
Zetruger
ivan.chistyakov.name

На форуме с: Jul 2007
Cообщений: 356
Город: Питер

 
require_once($filename) or die("cannot find file");


нелепая конструкция, функ. die никогда не выполнится =)

только если не установлен специальный еррор хандлер

Old Post 04.09.07 08:41 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
SiMM
Старожил PHPCluba

На форуме с: Jan 2004
Cообщений: 6393
Город: Чебоксары, Россия

> функ. die никогда не выполнится
Учите матчасть.
require_once

Old Post 04.09.07 08:53 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
Фанат
oncle terrible

На форуме с: Jul 2003
Cообщений: 33557
Город: Broomfield, United States

черт, туплю
про значение, возвращаемое реквайром, я подумал, но сообщение об ошибке направило мысль по привычным рельсам.

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

Old Post 04.09.07 08:54 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
Zetruger
ivan.chistyakov.name

На форуме с: Jul 2007
Cообщений: 356
Город: Питер

SiMM
не ну можно конечно извратиться и прописать в файле return FALSE;
но это бред и по сему настаиваю на своем =)


__________________
Даром хлеб не едим, мистер Стендаль...

Old Post 04.09.07 09:07 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
kotlf
Новичок

На форуме с: Sep 2007
Cообщений: 13
Город:

дело в том что я попробовал тупо скопировал эту строчку и в ставил в индексный файл другого сайт - естественно путь там этот неправильный и сработал дай на экране высветилось cannot find file. скрипт и возвращаемую ошибку я привел теле темы

-~{}~ 04.09.07 12:27:

 
Автор оригинала: *****
черт, туплю
про значение, возвращаемое реквайром, я подумал, но сообщение об ошибке направило мысль по привычным рельсам.

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


так в том то и дело что всё ок если убрать дай. никаких ошибок не возникает фал подключается класс описаный в нем юзается на полную и сайт работает.

Old Post 04.09.07 09:17 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
Фанат
oncle terrible

На форуме с: Jul 2003
Cообщений: 33557
Город: Broomfield, United States

 
попробовал тупо скопировал эту строчку и в ставил в индексный файл другого сайт


тестовый скрипт из одной строчки, размещенный на том хосте, его вывод, и сообщения об ошибках скопируй сюда.

 
скрипт и возвращаемую ошибку я привел теле темы


ты привел не скрипт, а одну строчку.
а я говорил о скрипте. целиком.
ты можешь отличить скрипт размером в одну строку от скрипта размером в несколько сот строк?

если не можешь, то не надо сюда обращаться вообще.

-~{}~ 04.09.07 12:28:

 
так в том то и дело что всё ок если убрать дай


ну так и убери.

-~{}~ 04.09.07 12:45:

У тебя есть два вопроса - практический и теоретический.

на практический ответ очень простой - убрать or die() вообще.

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

Old Post 04.09.07 09:28 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
kotlf
Новичок

На форуме с: Sep 2007
Cообщений: 13
Город:

ок
<?php
$filename='/home/account/admin/smarty/Smarty_Strat.php';
require_once($filename) or die("cannot find file");
?>
если использовать парсер ошибок то ошибка
Warning: require_once(): failed to open stream: No such file or directory in /home/account/main/index.php on line 3
Fatal error: require_once(): Failed opening required '1' (include_path='.:/usr/local/lib/php') in /home/account/main/index.php on line 3
если парсер не включать то просто пустая страница получается реквай затыкается и до дая дело вообще не доходит

убрать дай не проблема - проблема объяснить клиенту почему е му нужно фиксить код сайта после перехода со старого сервера на новый если все настройки вроде как идентичные. я думал может здесь кто с таким сталкивался и может помочь в понимании этой проблемы

Old Post 04.09.07 09:58 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
Zetruger
ivan.chistyakov.name

На форуме с: Jul 2007
Cообщений: 356
Город: Питер

 
Failed opening required '1'


что вообще это значит
файл который ты пытаешься подгрузить действительно называется "1" (без пути и без расширения)?

как оно туда попадает?


__________________
Даром хлеб не едим, мистер Стендаль...

Old Post 04.09.07 10:20 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
dark-demon
d(^-^)b

На форуме с: Feb 2007
Cообщений: 652
Город:

проблема в том, что require_once - это не функция, а кривая конструкция языка, поэтому запись:

require_once( $filename ) or die( "cannot find file" );

фактически интерпретируется как:

require_once( $filename or die( "cannot find file" ) );

чтобы интерпретировалось как надо, нужно поставить дополнительные скобки:

( require_once( $filename ) ) or die( "cannot find file" );

Отредактировано dark-demon 04.09.07 в 10:34

Old Post 04.09.07 10:31 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
Фанат
oncle terrible

На форуме с: Jul 2003
Cообщений: 33557
Город: Broomfield, United States

Zetruger
я так понимаю, что 1 - это возвращаемое реквайром значение.
а вот каким образом оно подставляется в параметры - действительно, непонятно.
Но могу предположить - оттого, что Require not a function but language construct
kotlf
объяснить, как раз - не проблема.
на старом сервере код был написан с нарушением синтаксиса пхп.

пример, когда die срабатывает, ты так и не привел.

Old Post 04.09.07 10:31 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
Zetruger
ivan.chistyakov.name

На форуме с: Jul 2007
Cообщений: 356
Город: Питер

<?php
$filename
='/home/account/admin/smarty/Smarty_Strat.php';
require_once(
$filename);
?>

code:
Warning: main(/home/account/admin/smarty/Smarty_Strat.php) [function.main]: failed to open stream: No such file or directory in z:\home\localhost\www\123.php on line 3 Fatal error: main() [function.require]: Failed opening required '/home/account/admin/smarty/Smarty_Strat.php' (include_path='.;/usr/local/php/PEAR') in z:\home\localhost\www\123.php on line 3


<?php
$filename
='/home/account/admin/smarty/Smarty_Strat.php';
require_once(
$filename) or die("cannot find file");
?>
code:
Warning: main(1) [function.main]: failed to open stream: Permission denied in z:\home\localhost\www\123.php on line 3 Fatal error: main() [function.require]: Failed opening required '1' (include_path='.;/usr/local/php/PEAR') in z:\home\localhost\www\123.php on line 3


<?php
$filename
='/home/account/admin/smarty/Smarty_Strat.php';
require_once(
$filename) . 'bla-bla-bla';
?>
code:
Warning: main(/home/account/admin/smarty/Smarty_Strat.phpbla-bla-bla) [function.main]: failed to open stream: No such file or directory in z:\home\localhost\www\123.php on line 3 Fatal error: main() [function.require]: Failed opening required '/home/account/admin/smarty/Smarty_Strat.phpbla-bla-bla' (include_path='.;/usr/local/php/PEAR') in z:\home\localhost\www\123.php on line 3


вообщем суть проста PHP интерпритирует:

require_once($filename) or die("cannot find file");
как:
require_once $filename or die("cannot find file");

require_once($filename) . 'bla-bla-bla';
как:
require_once $filename . 'bla-bla-bla';

вот от сюда и модификация переменной $filename и ваши баги

ЗЫ на лицо БАГ в PHP


__________________
Даром хлеб не едим, мистер Стендаль...
Old Post 04.09.07 10:32 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
Фанат
oncle terrible

На форуме с: Jul 2003
Cообщений: 33557
Город: Broomfield, United States

это не баг

Old Post 04.09.07 10:33 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
dark-demon
d(^-^)b

На форуме с: Feb 2007
Cообщений: 652
Город:

это не бага - это фича
Отредактировано dark-demon 04.09.07 в 11:18

Old Post 04.09.07 10:37 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
kotlf
Новичок

На форуме с: Sep 2007
Cообщений: 13
Город:

а не могут ноги рости из настроек пхп?

Old Post 04.09.07 10:41 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
Mr_Max
.

На форуме с: Jul 2002
Cообщений: 4330
Город: UA

 
z:\home\localhost\www\123.php


 
/home/account/admin/smarty/Smarty_Strat.php


PHP FAQ: Различие между абсолютными и относительными путями. В файловой системе и на сайте.

Old Post 04.09.07 10:41 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
Фанат
oncle terrible

На форуме с: Jul 2003
Cообщений: 33557
Город: Broomfield, United States

kotlf
 
а не могут ноги рости из настроек пхп?


нет.

Какая версия пхп на старом хосте?

Old Post 04.09.07 10:43 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
Время GMT. Текущее время 22:06. Подписаться на Тему | Версия для Печати
Страниц (3): [1] 2 3 » |  

PHP Club форумы: > Вопросы по программированию на РНР > почему при использовании die валится реквай
 
Оценить:
 
 
 
 

 © 1997-2010 PHPClubTeam      

Powered by vBulletin Copyright © 2000-2010 Jelsoft Enterprises Limited.