[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: fopen не видит файл
Red_Dragon
Здравствуйте. Что-то ума не приложу в чем может быть дело...
Есть проект с простой архитектурой - корневая папка проекта и подпапка. В подпапке написал скрипт, который редактирует файл лежащий в корневой папке. Проверил на AppServ для винды и Cherokee на Linux - все ок, а перенес на рабочий веб сервер где обычный LAMP и тут странное... скрипт с подпапки не может открыть ни один файл из корневой директории сайта. Локализовал проблему до минимума скрипт из подпапки:
<?php
$pass_file = '../file';
if (file_exists($pass_file) && is_readable($pass_file)) {
echo "yes";
} else echo "no";
?>

Пробовал вписать полный путь, все равно не открывает из корня, из своей папки открывает спокойно. Все права на файлы поставлены верно, владелец файлов один и тот-же.
Так-же в в корне сайта и подпапки содержаться файлы .htaccess
Корневой:

AddDefaultCharset utf-8

RewriteEngine on
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]


Подпапки:

AddDefaultCharset utf-8

#### security reason ####
AuthType Basic
AuthName "Restricted Area - statistic panel"
AuthUserFile Путь до файла с паролем
require valid-user

В чем же может быть дело?
alexbel2404
error_reporting(E_ALL);
$f = fopen('path/to/file', 'r');

Если будет ошибка, вывод сюда скопируй.
Rand
Какой путь подставляется на самом деле, можешь ещё посмотреть так
$pass_file = '../file';
echo realpath($pass_file);
Red_Dragon
Цитата (alexbel2404)
error_reporting(E_ALL);
$f = fopen('path/to/file', 'r');

Если будет ошибка, вывод сюда скопируй.

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


Цитата (Rand @ 21.04.2013 - 04:12)

Какой путь подставляется на самом деле, можешь ещё посмотреть так
$pass_file = '../file';
echo realpath($pass_file);


А вот тут интересное, провел эксперемент:

$a = "../time.php";
echo realpath($a)."<br>"; #вывод: ""
fclose($a);

$b = "/var/www/html/sites/bla-bla.org.ua/time.php";
echo realpath($b)."<br>"; #вывод: ""
fclose($b);

$c = fopen($a);
echo realpath($c)."<br>"; #вывод: "/var/www/html/sites/bla-bla.org.ua/test"
fclose($c);

$d = fopen($b);
echo realpath($d)."<br>"; #вывод: "/var/www/html/sites/bla-bla.org.ua/test"
fclose($d);


Не пойму почему первые 2 ничего не выводят, наверное все по той-же причине...хотя с другой стороны, почему последние 2 выводят путь до подпапки, а не корневой папки где ищу файл тоже не пойму.

Ну в итоге заметил в логах варнинг:

PHP Warning: file_exists(): open_basedir restriction in effect. File(/var/www/html/sites/bla-bla.org.ua/time.php) is not within the allowed path(s): (.) in /var/www/html/sites/bla-bla.org.ua/test/check.php on line 7

Прописал в php.ini open_basedir до сайта, не помогло, параметр установился глобальный, но локальный по прежнему был ".", пришлсоь еще в конфиг Апатча записать
<Directory /var/www/html/sites/bla-bla.org.ua/>
php_admin_value open_basedir "/var/www/html/sites/bla-bla.org.ua/"
</Directory>



Всем спасибо за советы!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.