Ваш пример должен работать очень хорошо ( Я снова разметил предыдущий файл согласно EDIT 2 ), при условии, что файл находится в текущем рабочем каталоге (теперь я просто сокращу его до cwd) .
EDIT
Извините, что я думал. Ваш пример, конечно, не работает, потому что file_exists()
должен быть указан полный путь к файлу. Поэтому добавьте файл с каталогом, который вы хотите вытащить из каталога. Тем не менее, мое предупреждение о санитарной обработке, внесении в белый список и т. Д. Все еще имеет значение.
КОНЕЦ РЕДАКТИРОВАНИЯ
РЕДАКТИРОВАТЬ 2
Вау, извини, я все испортила. file_exists()
должно отлично работать с относительными путями. Глядя на документацию , он предупреждает об ограничениях безопасного режима. Может быть, это относится к вашей ситуации, я не знаю.
END EDIT 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' );
}