ошибка открытия файла

Interrupt

Guest
ошибка открытия файла

Вот кусок кода:
PHP:
	if ($file)
	{
	$file='templates/'.$file;
		$fd = fopen($file,"r");
		$buf = fread($fd,filesize($file));
		fclose($fd);
	}
	preg_match_all('/\{.*?\}/', $buf, $tags);
	foreach ($tags[0] as $tag) 
	{
		$var = str_replace(array("{","}"),array("",""),$tag);
		$buf = str_replace("<!--".$tag."-->",$GLOBALS[$var],$buf);
	}
Вот ошибка:
Warning: fread(): supplied argument is not a valid stream resource in /home/eyeon/htdocs/testq/setup.inc.php on line 29

Warning: fclose(): supplied argument is not a valid stream resource in /home/eyeon/htdocs/testq/setup.inc.php on line 30

Причем этот кусок кода работает на В2К PHP4.2.3
А на PHP4.3.0 дает эти варнинги
В чем может быть трабл?
 

tony2001

TeaM PHPClub
надо проверять результат функции fopen, а не сразу его использовать.
 

Interrupt

Guest
У меня работает на 4.3.0 ...
А откуда у тебя берется $file ?
отсюда 'templates/

нгапример:
PHP:
function include_templates($file,buf='',$echo=1){
}
где $file это и есть "тэмплейт"
мое мнение после сабмита невидно переменных
они пропадают
куда мне посмотреть?

стоит registry_globals on
 

tony2001

TeaM PHPClub
$file == 'templates/'; ?
а с каких пор fopen открывать директории как файлы ?
 

tony2001

TeaM PHPClub
существует ли открываемый файл?
открывается ли он на чтение?
это все не проверяется у тебя.
 

Sleeper

Guest
Вот тебя и спросили откуда изначально берется $file.
Эта переменная где-нибудь раньше определяется? Если да то где и как?
 

Interrupt

Guest
описываю пример без проверок, все есть:
index.php
:
PHP:
include ("setup.inc.php");
$echo=1;
include_templates("form.top.tmpl");
.......
if ($step=1) include_templates('form.step.1.tmpl');
if ($step=2) include_templates('form.step.2.tmpl');
if ($step=3) {
что-либо
include_templates('form.step.middle.3.tmpl');
$echo=0;
}
......
include_templates("form.step.$step.tmpl");
.......
$echo=1;
include_templates("form.bottom.tmpl");
setup.inc.php
PHP:
function include_templates($file,buf='',$echo=1){
if ($file) 
    { 
    $file='templates/'.$file; 
        $fd = fopen($file,"r"); 
        $buf = fread($fd,filesize($file)); 
        fclose($fd); 
    } 
    preg_match_all('/{.*?}/', $buf, $tags); 
    foreach ($tags[0] as $tag)  
    { 
        $var = str_replace(array("{","}"),array("",""),$tag); 
        $buf = str_replace("<!--".$tag."-->",$GLOBALS[$var],$buf); 
    } 
}
templates файлы выглядят так и за таким принципом:
PHP:
.....
<input type=hidden name=step value=2>
<input name=do type=submit value='Proceed'>
идея постраничного вывода ясна?

все файлы точно есть
это я написал свой пример убрав все лишнее для примера(проверки)
Обратите внимание на переменную $echo!!!
Суть неоткрытия файла заключено в том, что после submita $echo невидна
 

Sleeper

Guest
повторюсь:
globals

Хотя в приведенных примерах я ни одного сабмита не увидел
 

Interrupt

Guest
сорри ошибочкаinclude ("setup.inc.php");
нужно убрать...
PHP:
$echo=1; // это нужно убрать
include_templates("form.top.tmpl"); 
....... 
if ($step=1) include_templates('form.step.1.tmpl'); 
if ($step=2) include_templates('form.step.2.tmpl'); 
if ($step=3) { 
что-либо 
include_templates('form.step.middle.3.tmpl'); 
$echo=0; 
}
 

tony2001

TeaM PHPClub
Interrupt:
выведи, наконец, переменую $file и ищи почему она неопределена или имеет значение несуществующего файла.
 

Interrupt

Guest
2 tony2001:
логично
доберусь домой начну "дебагить".
Думал может - это у когото было.
Поскольку сменил только место размещения (хостинг).
А до этого все работало....
 
Сверху