разбор функции

Don Arana

Новичок
разбор функции

Нашел пример такой функции -

PHP:
function foo ($in) {


if ($in != "") {$out = "inc/texts/" . $in;}

else {
	$out = 'error404.php';
}
return $out;
}
то есть, если я запрашивю файл, например - index.php?file и он есть в директории inc/texts, то все превосходно (в самом index'e.php я пишу <?php include (foo($QUERY_STRING)); ?> в том месте, куда хочу, чтобы вставлялся этот файл)

если я набираю просто index.php - выдается error404.php. Ок.

Но если я пишу так - index.php?fi - то мне выдается ошибка PHP, а не 404ый файл, хотя у меня в директории есть соответствующе настроенный файл .htaccess.

Я так понимаю, все дело в алгоритме функциии, но как ее переписать, чтобы на index.php?fi она тоже выдавала 404ую ошибку?

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

хелп %)
 

Demiurg

Guest
1. А почему не давать прямые ссылки давать ?
2. писать include 'file.php?param=value'; нельзя.
вместо этого надо писать
$param = 'value';
include 'file.php';
 

Don Arana

Новичок
погоди! ничего не понимаю!

где я пишу include 'file.php?param=value' ?
или ты имеешь в виду адресную строку, где ссылка выглядит как "file.php?value" ?


вместо этого надо писать
$param = 'value';
include 'file.php';

это где надо писать?

да, и что ты имеешь в виду под прямыми ссылками?
 

Demiurg

Guest
>где я пишу include 'file.php?param=value' ?
здесь:
<?php include (foo($QUERY_STRING)); ?>
foo() твоя что возвращает, когда $QUERY_STRING == 'file.php?value'

>это где надо писать?
я же сказал вместо чего это надо писать.

>да, и что ты имеешь в виду под прямыми ссылками?
ссылки на сами файлы в твоем случае как я понимаю это будет
http://site.com/inc/texts/file.php?param=value
 

Krisha

pain in the neck
при index.php?fi

$_SERVER['QUERY_STRING'] равна fi;

соответстветнно, тебе нужно проверять есть ли такой файл fi в папке inc/texts/ и если нету, тогда уже 404
 

Don Arana

Новичок
так смысл мне в файле index.php писать $param = 'value'; include 'file.php'; ???

А если я захочу подключить не file.php, а file2.php ?

Или я туплю конкретно?

>cсылки на сами файлы в твоем случае как я понимаю это будет
>http://site.com/inc/texts/file.php?param=value

ну да, http://site.com/inc/texts/index.php?value
 

Demiurg

Guest
>А если я захочу подключить не file.php, а file2.php ?
ну пиши
$param = 'value';
include 'file2.php';
 

Don Arana

Новичок
чат :)

>$param = 'value';
>include 'file2.php';

это я так понимаю пишется в файле index.php?
так я его не хочу трогать, вот в чем дело то...
 

Demiurg

Guest
что значит не трогать ? опиши тогда как у тебя сайт должен работать.
 

Don Arana

Новичок
в общем, так.
насчет index.php я загнул, он у меня другой, он коннектится к базе, выводит новости и т.п. (впрочем неважно)

но есть тематические разделы сайта - как - контакты, информация1, информация2. И для каждого из них я не хочу заводить отдельную страницу, т.к. в них будет меняться только содержание текста в теле страницы.

Поэтому допустим, я называю ОДНУ страницу navigator.php и через navigator.php?file1, navigator.php?file2, ... etc хочу подключать необходимую информацию (ну, не затрагивая никаких БД, потому что в данном случае это не нужно вабче). Ну, и естесственно, navigator.php не меняется, меняется его отображение в зависимотси от запроса.

вот..
 

Demiurg

Guest
не надо этого делать все делается проще.

файл info1.php
<?
include 'header.php';
echo 'info1';
include 'footer.php';
?>

файл info2.php
<?
include 'header.php';
echo 'info2';
include 'footer.php';
?>

и все.
 

Don Arana

Новичок
:0 я конечно ньюб, но в PHP! дело в том, что на сайте достаточно сложная верстка, и в файле navigation.php есть около 6 инклюдов, и не потому, что больше - это лучше, это потому - что меньше не получается и как бы.. ээ. структура чуток посложнее, чем ты привел.

я с тем же успехом могу создать файл не navigator.php, а contacts.php с абсолютно тем же внешним видом, просто изменю текст внутри тела страницы на контактную информацию. И я так раньше делал.

Но сейчас так не хочу :) По моему неудобно хотя бы потому, что файл contacts.php будет весить как файл navigator.php или даже больше, а мог бы быть вместо contacts.php один маленький текстовый файлик.
 

Demiurg

Guest
Я не понял причем тут сложная верстка ? Если она везде разная, то тем более не надо все пизать в один файл, если нет, то парой инклудов можно обойтись.
 

Don Arana

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

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

Don Arana

Новичок
Krisha
упс, сорри!

>при index.php?fi
>$_SERVER['QUERY_STRING'] равна fi;
>соответстветнно, тебе нужно проверять есть ли такой файл fi >в папке inc/texts/ и если нету, тогда уже 404

хорошо, тогда можно подсказку? как? :)
 

Don Arana

Новичок
да сенкс! тока одна поправка! нужно будет проверять, есть ли в папке именно тот файл, который нужен, а не всякие урезанные его варианты типа "fi" и т.п. :)
 

Don Arana

Новичок
ха! столкнулся с интересной ситуацией!


запрос:
http://10.5.1.83/altair/navigation.php?connect

в странице navigation открывается текст из файла inc/texts/connect

запрос:
http://10.5.1.83/altair/navigation.php?conne

в странице navigation пишется мой текст о ошибке


далее самое ИНТЕРЕСНОЕ:

запрос:
http://10.5.1.83/altair/navigation.php?con

пишется ошибка -
Fatal error: input in flex scanner failed in c:\internet\home\localhost\www\altair\inc\texts\con on line 1

Самое главное, что называя другой такой же файл именем, например, abcdefg и делая различные попытки найти такой же глюк, у меня ничгео не получается, с ним все ок.

Из этого я делаю вывод, что что-то PHP не нравится слово "con" ???

вот окд в navigation.php, ответственный за вывод файлов из директории inc/texts/

PHP:
$filename = foo($QUERY_STRING);

if (file_exists($filename)) { include ($filename); } 

else { print "The file $filename does not exist";}
Функция foo (осталась прежней):
PHP:
function foo ($in) { 


if ($in != "") {$out = "inc/texts/" . $in;} 

else { 
    $out = 'error404.php'; 
} 
return $out; 
}
ну что не так? неправильное использование include?? но почему такой странный глюк?
 
Сверху