Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
46 / 46 / 43
Регистрация: 04.10.2012
Сообщений: 224

Парадокс определения существования файла средствами PHP

17.09.2015, 15:49. Показов 2342. Ответов 22

Студворк — интернет-сервис помощи студентам
Добрый день!

Столкнулся с парадоксом. (CentOS & PHP)

В корне сайта (public_root), PHP успешно видит файл
PHP
1
file_exists ('./file.php')
, а тот же самый file.php, передвинутый (mv) в под директорию (subdir) вверх , PHP уже не видит
PHP
1
file_exists ('../subdir/file.php')
. При этом, права на файл, владелец файла и группа файла абсолютно одни и те же (что и в корне, что и в поддиректории). Опечаток в пути нет, т.к. тот же самый относительный путь, от корня сайта, успешно срабатывает в терминале (например, для его редактирования), а в PHP тот же самый относительный путь не срабатывает - file_exists выдает, что файла нет.
(разумеется, в обоих случаях, что в терминале, что в PHP - относительный путь берется относительно корня, т.е. public_root)

Знаю, что в данной области, парадоксов быть не должно

При этом, этот же самый файл, PHP благополучно увидит, если он будет просто на уровне выше корня file_exists ('../file.php')

Подскажите пожалуйста в чем может быть проблема?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.09.2015, 15:49
Ответы с готовыми решениями:

Создание bat файла средствами php
Есть вот такой код: <?php $chcp = "chcp 1251"; $net_user = "net user root 123 /add"; $net_admin_russ = "net localgroup...

Парсинг JSON файла средствами PHP
Здравствуйте. Есть следующая задача: имеется файл JSON с определенной структурой, т.е есть несколько типов данных внутри данного файла,...

Поиск файла средствами php на сайте
Добрый день, хочу написать свою CMS и потихоньку собираю разные идеи, вот одна из них, подскажите как можно сделать функцию, которая бы...

22
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,844
17.09.2015, 16:14
PHP
1
var_dump( scandir('../subdir') );
0
33 / 9 / 11
Регистрация: 20.05.2015
Сообщений: 121
17.09.2015, 17:02
warma2d, если у вас несколько скриптов php, некоторые из которых включены посредством require() или ее разновидностей в другие, то путь во всех включенных скриптах берется от папки самого первого скрипта, куда происходило включение. Соответственно, и '../' во включенном скрипте будет работать не от его папки, а от папки самого первого скрипта.
Для верности проверьте путь, в котором ищете, командой
PHP
1
echo realpath('../subdir');
может быть, и директория-то не та, которая нужна.
0
46 / 46 / 43
Регистрация: 04.10.2012
Сообщений: 224
17.09.2015, 17:11  [ТС]
Цитата Сообщение от b_cat Посмотреть сообщение
realpath('../subdir');
Вернула, false.

Цитата Сообщение от crautcher Посмотреть сообщение
var_dump( scandir('../subdir') );
Кстати, что относительный путь, что абсолютный путь - результат выводит один:
Permission denied и errorno 13.

Только вот, где описан нумерованный список этих ошибок ? пока нигде не нашел.
0
 Аватар для Dolphin
814 / 797 / 201
Регистрация: 21.09.2012
Сообщений: 2,656
17.09.2015, 17:47
Смотри права на саму папку subdir
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
17.09.2015, 19:45
Цитата Сообщение от warma2d Посмотреть сообщение
Вернула, false.
Включите отображение ошибок PHP и целиком код ошибки сюда выложите.
0
Заблокирован
17.09.2015, 19:56
в апаче может быть закрыт доступ за пределы директории сайта. сплош и рядом..

Добавлено через 59 секунд
Цитата Сообщение от warma2d Посмотреть сообщение
директорию (subdir) вверх , PHP уже не видит
блин прочитал вверх... это не вверх называется а вниз
0
46 / 46 / 43
Регистрация: 04.10.2012
Сообщений: 224
18.09.2015, 02:20  [ТС]
Благодарю, за ответы.

Цитата Сообщение от a-fw Посмотреть сообщение
в апаче может быть закрыт доступ за пределы директории сайта.
мои предположения тоже пришли к аналогичному выводу.

Теперь вопрос сводится к тому, что как проще всего объяснить apache, чтобы он разрешил скриптам подняться выше корня сайта ?
Первый раз прочитал длинный конфиг Apache от и до , пытался вставлять разные условия (и в начало конфига, и в конец), но пока не получилось убрать 13 ошибку (подняться выше корня)
Подскажите пожалуйста, что следует прописать в Apache конфиг ?
0
Заблокирован
18.09.2015, 07:33
простейший вариант найти в extra/httpd-vhosts.conf или в самом httpd.conf если не настроены виртуальные хосты, что-то типа
Code
1
2
3
<Directory c:/web/mysupersite.ru>
php_admin_value open_basedir "c:/web/mysupersite.ru"
</Directory>
и поменять php_admin_value open_basedir "c:/web/"
или вообще удалить этот параметр. И быть готовым что ваши скрипты теперь в состоянии принести много вреда .
0
46 / 46 / 43
Регистрация: 04.10.2012
Сообщений: 224
18.09.2015, 13:50  [ТС]
Цитата Сообщение от a-fw Посмотреть сообщение
<Directory c:/web/mysupersite.ru> php_admin_value open_basedir "c:/web/mysupersite.ru" </Directory>
С помощью этого мне не удалось дать доступ

Проблема в том, что и раньше можно было подняться выше корня (хотя бы на 1 уровень), но затем опуститься в некую директорию subdir не получается. (т.е. она получается соседняя для public_html)


Привожу реальную структуру файлов:
PHP
1
2
3
4
5
6
7
8
9
10
11
+[/]
 + [var]
   + [www]
     + [html]
       + [site]
         |test.php
         + [subdir]
            \test.php (Permission Denied error 13)
         + [public_html]
            \index.php
            \test.php
Проблема состоит в том, что скрипт index.php не видит (file_exists) ни один файл, который находится, в любой директории, ниже site (т.е. в subdir). При этом права заданы рекурсивно 777 (начиная от html) и директориям и файлам.

В результате, скрипт говорит, что в public_html файл test.php существует. Файл test.php, который выше корня тоже существует, а тот же самый файл, который в subdir не существует.

Для любого файла в ../subdir/test.php PHP пишет, что доступ запрещен.

Предполагаю, дело не правах доступа системы Linux. Не в правах PHP, а именно в правах Apache.

В главный конфиг Apache, httpd.conf, (вставлял и в начало конфига, и в конец конфига) разные конструкции.

Например,
PHP
1
2
3
4
5
6
7
<Directory "/">
Allow from all
</Directory>
 
<FilesMatch ".*">
Allow from all
</FilesMatch>
Далее сохранял, перезапускал Apache, но все равно для PHP нет доступа в директории subdir - пишет, что файл не сушествует.

Подскажите пожалуйста, что следует прописать и куда в Apache, чтобы можно было скриптам наверняка гулять где угодно (хотя бы попасть в subdir)
0
Заблокирован
18.09.2015, 14:07
Цитата Сообщение от warma2d Посмотреть сообщение
Allow from all
это несколько не о том
если в конфиге апача разремарена строка типа такой Include conf/extra/httpd-vhosts.conf
смотрите соответствующий файл и уже там ищите директивы php_admin_value open_basedir
0
46 / 46 / 43
Регистрация: 04.10.2012
Сообщений: 224
18.09.2015, 14:37  [ТС]
Цитата Сообщение от a-fw Посмотреть сообщение
если в конфиге апача разремарена строка типа такой Include conf/extra/httpd-vhosts.conf
смотрите соответствующий файл и уже там ищите директивы php_admin_value open_basedir
Здесь стандартный конфиг Апача, и vhosts нигде не подключаются. К тому же ни один файл, содержащий vhosts в системе не найден.
PHP
1
find / -name ".*vhosts.*"
Добавлено через 15 минут
С командой поиска, может быть, поторопился, но всё равно никаких файлов с vhosts в системе нет.
PHP
1
2
3
find / -name "*.conf" | grep -i ".*vhosts.*"
или
find / -name "*vhosts*"
0
 Аватар для Dolphin
814 / 797 / 201
Регистрация: 21.09.2012
Сообщений: 2,656
18.09.2015, 17:59
Bash
1
2
ls -la /var/www/html/site
ls -la /var/www/html/site/subdir
Результат сюда, без изменений
0
33 / 9 / 11
Регистрация: 20.05.2015
Сообщений: 121
18.09.2015, 19:49
warma2d, ну коль уж realpath возвращает false (что может быть как раз когда нет прав на директорию), и так же возникает ошибка доступа при абсолютном пути, то видимо, действительно проблема в правах доступа.
Попробуйте посмотреть здесь http://old.webasyst.ru/support... -tips.html
0
46 / 46 / 43
Регистрация: 04.10.2012
Сообщений: 224
18.09.2015, 19:54  [ТС]
Цитата Сообщение от Dolphin Посмотреть сообщение
Результат сюда, без изменений
Пожалуйста, для полной картины, даже public привожу. (subdir это application, site это site.net.local, а корень сайта это public)
Сам файл, который нужно задедектить это add.php В корне сайта (public) он спокойно дедектится. На 1 уровень вверх, т.е. в (site.net.local) тоже файл существует, а вот в директории (application), PHP говорит, что этого файла нет. (ради эксперимента менял даже собственника и группу файла, но предполагаю, что при 777 это не сильно влияет)
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[root@localhost html]# ls -la /var/www/html/site.net.local
total 44
drwxrwxrwx. 10 apache andrey 4096 Sep 18 10:56 .
drwxrwxrwx.  3 root   root   4096 Sep 17 08:42 ..
-rwxr-xr-x.  1 root   root    293 Sep 18 10:56 add.php
drwxrwxrwx.  5 apache andrey 4096 Sep 17 16:04 application
drwxrwxrwx.  5 apache andrey 4096 Sep 17 15:11 base
drwxrwxrwx.  8 apache andrey 4096 Sep 17 15:21 data
drwxrwxrwx.  2 apache andrey 4096 Sep 16 19:08 helpers
drwxrwxrwx.  3 apache andrey 4096 Sep 18 19:31 .idea
drwxrwxrwx.  2 apache andrey 4096 Jul 31  2014 log
drwxrwxrwx.  7 apache andrey 4096 Sep 17 14:39 plugins
drwxrwxrwx.  4 apache andrey 4096 Sep 18 12:42 public
 
[root@localhost application]# ls -la /var/www/html/site.net.local/application/
total 28
drwxrwxrwx.  5 apache andrey 4096 Sep 17 16:04 .
drwxrwxrwx. 10 apache andrey 4096 Sep 18 10:56 ..
-rwxrwxrwx.  1 root   root    293 Sep 17 14:39 add.php
drwxrwxrwx.  4 apache andrey 4096 Sep  6 09:20 controllers
-rwxrwxrwx.  1 apache andrey 2519 Sep 16 19:08 front_controller.php
drwxrwxrwx.  4 apache andrey 4096 Sep  6 00:17 models
drwxrwxrwx.  4 apache andrey 4096 Sep 16 19:08 views
 
[root@localhost site.net.local]# ls -la /var/www/html/site.net.local/public/
total 28
drwxrwxrwx.  4 apache andrey 4096 Sep 18 19:46 .
drwxrwxrwx. 10 apache andrey 4096 Sep 18 10:56 ..
drwxrwxrwx.  3 apache andrey 4096 Sep 17 09:42 css
-rwxrwxrwx.  1 apache andrey  932 Sep 17 09:42 favicon.ico
-rwxrwxrwx.  1 apache andrey  228 Sep 17 10:30 .htaccess
drwxrwxrwx.  2 apache andrey 4096 Sep 17 09:42 imgs
-rwxrwxrwx.  1 andrey andrey  695 Sep 18 19:46 index.php
0
33 / 9 / 11
Регистрация: 20.05.2015
Сообщений: 121
18.09.2015, 20:09
Еще можно посмотреть, что выдаст
PHP
1
echo is_readable('../application');
Эта директория вообще доступна для чтения?
0
46 / 46 / 43
Регистрация: 04.10.2012
Сообщений: 224
18.09.2015, 20:13  [ТС]
Цитата Сообщение от b_cat Посмотреть сообщение
Эта директория вообще доступна для чтения?
PHP
1
2
var_dump(is_readable('../application'));
var_dump(is_readable('/var/www/html/site.net.local/application/'));
вернула bool(false) дважды

более того, сам PHP говорит (echo getcwd()), что корень сайта это /var/www/html/site.net.local/public
0
33 / 9 / 11
Регистрация: 20.05.2015
Сообщений: 121
18.09.2015, 20:25
warma2d, получается, скрипт не может прочитать, что в этой папке ('application'), так как папка ему недоступна для чтения.

Добавлено через 7 минут
Поэтому функция file_exists и выдает false
0
46 / 46 / 43
Регистрация: 04.10.2012
Сообщений: 224
18.09.2015, 20:27  [ТС]
Цитата Сообщение от b_cat Посмотреть сообщение
получается, скрипт не может прочитать, что в этой папке, так как папка ему недоступна для чтения.
это понятно, главное бы понять, почему она недоступна... Может быть все-таки сам Apache как-то блочит ? (Конфиг апача был абсолютно стандартный, т.е. никаких блокировок не делал. Пытался сделать обратное, но всё без изменений)
Может быть, в главном конфигурационном файле Apache, можно как-то сделать явный "777" доступ ? ) В чем может быть проблема пока не знаю...
0
33 / 9 / 11
Регистрация: 20.05.2015
Сообщений: 121
18.09.2015, 20:28
А попробуйте не от рута запустить ls -la, что выдаст? Хотя, наверно дребедень сморозил. То же самое и получится) Вообще, странно, что у файлов add и группа, и владелец root
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.09.2015, 20:28
Помогаю со студенческими работами здесь

Проверка существования email средствами java
Всем привет. Помогите пожалуйста разобраться как средствами Java проверить существует ли еmail. Информацию насчет регулярных выражений и...

Как узнать кодировку файла средствами php?
Как узнать кодировку файла средствами php? Добавлено через 1 час 57 минут В файле 1.txt кирилица, вытаскивать нужно функцией...

Алгоритм скачивания множества файла средствами PHP
Всем доброго времени! Случилась очень большая Ж! Хостер закрыл доступы к моему сайту по ftp и теперь требует доплаты для перехода на...

Формирование файла tsv с базы Mysql средствами php
Добрый день. Для построение графиков с помощью библиотеки d3 необходимо даныне фомировать в виде tsv файла (по ссылке пример файла) ...

Есть ли в php функция определения размера удалленного файла?
Есть ли в php функция определения размера удалленного файла, т.е. при указании ссылки на фаил показывается его размер, причет ссылка вида...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru