Подробностей можно?
Можно сравнивать полный путь текущей директории __DIR__ с путем запрашиваемого файла, чтоб начало было ровно __DIR__
Это типо защита я так понимаю?
Дмитрий, да, чтобы php пользователя не смог открыть файлы вне папки пользователя. Я просто не хочу писать полноценный текстовый обработчик php, который запретит это делать, а просто при недопустимом действии файла принудительно его останавливать и выводить ошибку "у вас нет на это прав".
P.S.: пусть работает любая функция, пусть будет известен абсолютный путь, но даже обладая этими данными нельзя было читать и редактировать файлы, которые неразрешены
Павел Соколов, кусок кода с проверкой?
Например файл ты передаёшь по гет, берешь его имя, заворачивоешь в realpath() и сравниваешь например первые 15 символов. Или сколько там до __DIR__
Дмитрий, если проверка кода, то пользователь может замутить функцию, которая не будет подходить под критерии проверки, отбрасываем. Второй вариант не понял совсем: get() или $_GET? Заворачиваю в realpath __DIR__ до какого файла (того, который импортирует скрипт пользователя или скрипт пользователя или данные которые импортирует скрипт пользователя)?
Проще всего было бы отслеживать какие файлы он открывает.
Другой вариант - интегрировать его в другой скрипт, который даст такие аргументы, которые не позволят открыть нежелательные папки.
Как реализовать это я не знаю.
Павел Соколов, ну например все через индекс.. Там например есть файл /home/srv/index.php
__DIR__ будет /home/srv/
При работе с файлами проверяем куда ссылка, если его путь не совпадает с __DIR__ кидаем ошибку
Дмитрий, чтение родительского каталога: __DIR__."/.."
не прокатит вариант с DIR, можно ведь использовать root, realpath и т.д., поэтому нужна либо проверка того, что открывает
Павел Соколов, не за компом. Я же написал уже, например так
index.php?file=/home/asd/1.png
if (substr($_GET['file'], 0, 30) !== __DIR__) { //тут ошибка
}