почему при использовании die валится реквай

kotlf

Новичок
почему при использовании 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
 

kotlf

Новичок
Автор оригинала: *****
echo $filename;
эхо выводит правильный путь к файлу. та даже если не использовать переменную а забить путь руками всё равно происходит таже фигня.
 

Фанат

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

SiMM

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

Фанат

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

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

Zetruger

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

kotlf

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

-~{}~ 04.09.07 12:27:

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

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

Фанат

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

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

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

-~{}~ 04.09.07 12:28:

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

-~{}~ 04.09.07 12:45:

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

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

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

kotlf

Новичок
ок
<?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
если парсер не включать то просто пустая страница получается реквай затыкается и до дая дело вообще не доходит

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

Zetruger

ivan.chistyakov.name
Failed opening required '1'
что вообще это значит
файл который ты пытаешься подгрузить действительно называется "1" (без пути и без расширения)?

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

dark-demon

d(^-^)b
проблема в том, что 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" );
 

Фанат

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

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

Zetruger

ivan.chistyakov.name
PHP:
<?php
$filename='/home/account/admin/smarty/Smarty_Strat.php';
require_once($filename);
?>
Код:
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:
<?php
$filename='/home/account/admin/smarty/Smarty_Strat.php';
require_once($filename) or die("cannot find file");
?>
Код:
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:
<?php
$filename='/home/account/admin/smarty/Smarty_Strat.php';
require_once($filename) . 'bla-bla-bla';
?>
Код:
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
 
Сверху