За последние 24 часа нас посетили 64282 программиста и 1753 робота. Сейчас ищет 1451 программист ...

Помогите решить проблему

Тема в разделе "Прочие вопросы по PHP", создана пользователем boo0, 13 янв 2016.

  1. boo0

    boo0 Новичок

    С нами с:
    13 янв 2016
    Сообщения:
    2
    Симпатии:
    0
    Время от времени такие ошибки на сайте

    Код (PHP):
    1. Warning: file_exists() [function.file-exists]: open_basedir restriction in effect. File(/home/u184597417/public_html/defines.php) is not within the allowed path(s): (/home/u539187610:/tmp:/var/tmp:/opt/php-5.3/pear) in /home/u184597417/public_html/index.php on line 28
    2.  
    3. Warning: require_once() [function.require-once]: open_basedir restriction in effect. File(/home/u184597417/public_html/includes/defines.php) is not within the allowed path(s): (/home/u539187610:/tmp:/var/tmp:/opt/php-5.3/pear) in /home/u184597417/public_html/index.php on line 36
    4.  
    5. Warning: require_once(/home/u184597417/public_html/includes/defines.php) [function.require-once]: failed to open stream: Operation not permitted in /home/u184597417/public_html/index.php on line 36
    6.  
    7. Fatal error: require_once() [function.require]: Failed opening required '/home/u184597417/public_html/includes/defines.php' (include_path='.:/opt/php-5.3/pear') in /home/u184597417/public_html/index.php on line 36
    вот код этих строк
    Код (PHP):
    1. if (file_exists(__DIR__ . '/defines.php'))
    2. {
    3.     include_once __DIR__ . '/defines.php';
    4. }
    5.  
    6. if (!defined('_JDEFINES'))
    7. {
    8.     define('JPATH_BASE', __DIR__);
    9.     require_once JPATH_BASE . '/includes/defines.php';
    10. }
    11.  
    как можна решить проблему?

    Подсказка от модератора:
    Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
    Используйте отступы в коде для форматирования текста.
    Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
    Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    права какие стоят на файл defines.php?
     
  3. boo0

    boo0 Новичок

    С нами с:
    13 янв 2016
    Сообщения:
    2
    Симпатии:
    0
    а как проверить, какие права?
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    да права-то тут причем? понятным языком написано что включены ограничения оупен_бейздир и запрошенный элемент не относится к разрешенным деревьям. и внезапно - если посмотреть что запрошено и какие деревья разрешены - можно заметить что идентификатор пользователя не совпадает
    криво хостинг настроен?
     
  5. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    ну в каком-то смысле не разрешено обращаться туда
     
  6. archonmaster

    archonmaster Новичок

    С нами с:
    17 мар 2016
    Сообщения:
    3
    Симпатии:
    0
    У меня такая же проблема. Где может быть ошибка в настройках сервера? У меня apache2, php 5.6 работает через PHP-FMP.
    Если перезапускаем apache, то в __DIR__ содержится правильное значение, скрипты работают правильно. через некоторое время (10-20 минут) скрипты перестают работать. В логах появляется эта ошибка, из которой видно, что __DIR__ вернула не то значение. Если после этого запустить скрипт, содержащий var_dump(__DIR__), тогда эта переменная начинает возвращать правильное значение. Но не надолго, через 10-20 минут опять начинается ошибка.
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    полтергейст
     
  8. archonmaster

    archonmaster Новичок

    С нами с:
    17 мар 2016
    Сообщения:
    3
    Симпатии:
    0
    Лог ошибки:
    Код (Text):
    1. [Thu Mar 17 19:45:33.181522 2016] [:error] [pid 9170] [client 195.208.172.107:45676] FastCGI: server "/var/www/clients/client2/web50/cgi-bin/php5-fcgi-*-80-xxxxxxx.ru" stderr: PHP message: PHP Warning:  file_exists(): open_basedir restriction in effect. File(/var/www/clients/client2/web40/web/admin/vendor/LimeExtra/App.php) is not within the allowed path(s): (/var/www/clients/client2/web50/web:/var/www/clients/client2/web50/private:/var/www/clients/client2/web50/tmp:/var/www/xxxx.ru/web:/srv/www/xxxx.ru/web:/usr/share/php5:/usr/share/php:/tmp:/usr/share/phpmyadmin:/etc/phpmyadmin:/var/lib/phpmyadmin) in /var/www/clients/client2/web50/web/admin/bootstrap.php on line 9
    Код, который вызывает ошибку:
    Код (Text):
    1. spl_autoload_register(function($class){
    2.     $class_path = __DIR__.'/vendor/'.str_replace('\\', '/', $class).'.php';    
    3.     if(file_exists($class_path)) include_once($class_path);
    4. });
    Я ожидаю, что в __DIR__ должно находиться /var/www/clients/client2/web40/web/admin, а реально там находится /var/www/clients/client2/web50/web/admin
    Если код модифицировать на этот, то ошибка пропадает:
    Код (Text):
    1. spl_autoload_register(function($class){
    2. var_dump(__DIR__);
    3.     $class_path = __DIR__.'/vendor/'.str_replace('\\', '/', $class).'.php';    
    4.     if(file_exists($class_path)) include_once($class_path);
    5. });
    И этот полтергейст происходит на всех сайтах. и на всех сайтах в __DIR__ попадает именно web40
     
  9. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а если выключить кэш опкода?
     
  10. archonmaster

    archonmaster Новичок

    С нами с:
    17 мар 2016
    Сообщения:
    3
    Симпатии:
    0
    У меня используется Zend Opcache. Нашел описание этой же проблемы здесь https://bugs.php.net/bug.php?id=67481
    Там описывается ситуация, когда на одном сервере располагаются два разных сайта с одинаковой структурой файлов и тогда скрипты одного сайта начинают инклудить файлы другого сайта (там в примере один интернет магазин отображал каталог товаров другого интернет магазина). В моем случае, думаю, происходило бы также, если бы права доступа к файлам были разграничены по-другому.

    Тамже описано, что это не баг, а объяснимое поведение системы в случае, если настройки opcache.validate_timestamps и opcache.use_cwd установлены в 0. Тогда при кэшировании скрипта в его имени не добавляется текущий путь к файлу. Насчет опции opcache.validate_timestamps я сомневаюсь, что в ней причина, но насчет опции opcache.use_cwd=0 такая логика работы вполне справедлива. Эту настройку можно использовать только, если на сервере один сайт и в нем используются уникальные имена файлов (зачем это вообще нужно?). Рекомендуется всегда включать эту опцию.

    Однако, в моем случае opcache.use_cwd=on и opcache.validate_timestamps=on. И этот глюк все равно проявляется. Ниче не понимаю.
    Попробую вырубить Zend Opcache, посмотреть что будет происходить. Но совсем без кэширования тоже плохо.

    Добавлено спустя 16 минут 35 секунд:
    Полный список моих настроек (все они оставлены по умолчанию):
    Код (Text):
    1. opcache.blacklist_filename=no value
    2. opcache.consistency_checks=0
    3. opcache.dups_fix=Off
    4. opcache.enable=On
    5. opcache.enable_cli=Off
    6. opcache.enable_file_override=Off
    7. opcache.error_log=no value
    8. opcache.fast_shutdown=0
    9. opcache.file_update_protection=2
    10. opcache.force_restart_timeout=180
    11. opcache.inherited_hack=On
    12. opcache.interned_strings_buffer=4
    13. opcache.load_comments=1
    14. opcache.log_verbosity_level=1
    15. opcache.max_accelerated_files=2000
    16. opcache.max_file_size=0
    17. opcache.max_wasted_percentage=5
    18. opcache.memory_consumption=64
    19. opcache.optimization_level=0xFFFFFFFF
    20. opcache.preferred_memory_model=no value
    21. opcache.protect_memory=0
    22. opcache.restrict_api=no value
    23. opcache.revalidate_freq=2
    24. opcache.revalidate_path=Off
    25. opcache.save_comments=1
    26. opcache.use_cwd=On
    27. opcache.validate_timestamps=On
    Опция opcache.revalidate_path=Off что означает? и может ли она вызывать мою проблему?
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    opcache.revalidate_freq=0 сделай

    очень похоже, что она и вызывает
    сделай opcache.revalidate_path = 1