Ваш пример должен работать нормально (Я снова удалил предыдущий, как в EDIT 2), при условии, что файл находится в текущем рабочем каталоге (с этого момента я буду сокращать его до cwd).
EDIT
Извините, о чем я думал. Ваш пример, конечно, не работает, потому что file_exists()
должен быть указан полный путь к файлу. Поэтому добавьте к файлу каталог, из которого вы хотите извлечь файлы. Тем не менее, мое предупреждение о санации, внесении в белый список и т. д. остается в силе.
КОНЕЦ РЕДАКТИРОВАНИЯ
РЕДАКТИРОВАТЬ 2
Ничего себе, извините, я сильно напортачил. file_exists()
должно нормально работать с относительными путями. Глядя на документацию, она предупреждает об ограничениях безопасного режима. Возможно, это применимо к вашей ситуации, я не знаю.
КОНЕЦ РЕДАКТИРОВАНИЯ 2
Вы можете проверить, что такое cwd с помощью getcwd()
. При нормальных обстоятельствах cwd совпадает с точкой входа вашего приложения. Итак, если, например, /usr/www/your_site_root/index.php
— это точка входа, то /usr/www/your_site_root/
— это cwd.
Поэтому файлы, которые вы пытаетесь включить в свои примеры, должны находиться в указанном каталоге.
Небольшой совет:
Возможно, вы уже знаете об этом, но ваш пример не очень безопасен. Вы никоим образом не очищаете ввод от пользователя (в данном случае $_GET[ 'file' ]
). Таким образом, посетитель сможет включать все виды файлов php с нежелательными результатами.
Поэтому я советую вам вести белый список файлов, которые разрешено загружать. Что-то типа:
<?php
$whiteList = array(
'dude',
'chick',
'mom'
);
// and just to be safe, you should probably strip stuff like ../ etc. here too.
$requestedFileBaseName = $_GET[ 'file' ];
if( !in_array( $requestedFileBaseName, $whileList ) )
{
include( '404.php' );
}
else
{
include( $requestedFileBaseName . '.php' );
}
person
Decent Dabbler
schedule
08.02.2010