Ошибка открытия устройства воспроизведения 2 нет такого файла или каталога

Обновлено: 06.07.2024

В PHP скриптах, будь то вызов include() , require() , fopen() или их производные, такие как include_once , require_once , или даже, move_uploaded_file() часто встречается ошибка или предупреждение:

Не удалось открыть поток: нет такого файла или каталога.

Что такое хороший процесс, чтобы быстро найти причину проблемы?

Решение

Есть много причин, по которым можно столкнуться с этой ошибкой, и, таким образом, хороший контрольный список того, что проверять первым, значительно помогает.

Давайте рассмотрим, что мы устраняем неисправности в следующей строке:

1. Проверьте путь к файлу для опечаток

или переместить то, что называется require* или же include* в свою переменную, скопируйте его, скопируйте и попробуйте получить доступ к нему из терминала:

Затем в терминале:

2. Проверьте правильность пути к файлу относительно относительного и абсолютного пути.

  • если он начинается с косой черты «/», то это относится не к корню папки вашего сайта (корню документа), а к корню вашего сервера.
    • например, каталог вашего сайта может быть /users/tony/htdocs
    • таким образом, не относительно пути корня вашего веб-сайта или файла, в котором вы печатаете
    • по этой причине всегда используйте абсолютные пути к файлам

    Чтобы сделать ваш сценарий надежным на случай, если вы что-то передвигаете, и при этом генерируете абсолютный путь во время выполнения, у вас есть 2 варианта:

      использование require __DIR__ . "/relative/path/from/current/file" , __DIR__ магическая константа возвращает каталог текущего файла.

    определить SITE_ROOT константа себя:

      в корне каталога вашего веб-сайта создайте файл, например, config.php

    в config.php , записывать

    в каждом файле, где вы хотите сослаться на корневую папку сайта, включите config.php , а затем используйте SITE_ROOT постоянная где угодно

    Эти 2 метода также делают ваше приложение более переносимым, поскольку оно не зависит от настроек ini, таких как путь включения.

    3. Проверьте ваш путь включения

    Такое включение будет выглядеть так:

    В этом случае вам нужно убедиться, что папка, в которой находится «Zend», является частью пути включения.

    Вы можете проверить путь включения с помощью:

    Вы можете добавить в него папку с помощью:

    4. Убедитесь, что ваш сервер имеет доступ к этому файлу

    Может случиться так, что все вместе, пользователь, выполняющий процесс сервера (Apache или PHP), просто не имеет разрешения на чтение или запись в этот файл.

    Чтобы проверить, под каким пользователем работает сервер, вы можете использовать posix_getpwuid :

    Чтобы узнать разрешения для файла, введите в терминале следующую команду:

    5. Проверьте настройки PHP

    Если ничего из вышеперечисленного не сработало, возможно, проблема в том, что некоторые настройки PHP запрещают ему доступ к этому файлу.

    Три настройки могут быть актуальны:

      • Если это установлено, PHP не сможет получить доступ ни к какому файлу за пределами указанного каталога (даже через символическую ссылку).
      • Тем не менее, поведение по умолчанию для него не должно быть установлено, в этом случае нет никаких ограничений
      • Это можно проверить, позвонив phpinfo() или с помощью ini_get("open_basedir")
      • Вы можете изменить настройку, отредактировав файл php.ini или файл httpd.conf.
      • если это включено, ограничения могут применяться. Однако это было удалено в PHP 5.4. Если вы все еще используете версию, которая поддерживает обновление в безопасном режиме, до версии PHP, которая все еще поддерживается .
      • это относится только к включению или открытию файлов через сетевой процесс, такой как http: // не при попытке включить файлы в локальную файловую систему
      • это можно проверить с помощью ini_get("allow_url_include") и установить с ini_set("allow_url_include", "1")

    Если ничего из перечисленного не позволяет диагностировать проблему, вот несколько особых ситуаций, которые могут произойти:

    1. Включение библиотеки с использованием пути включения

    Может случиться так, что вы включите библиотеку, например Zend Framework, используя относительный или абсолютный путь. Например :

    Но тогда вы все равно получаете такую ​​же ошибку.

    Это может произойти из-за того, что файл, который вы (успешно) включили, сам имеет оператор включения для другого файла, и этот второй оператор включения предполагает, что вы добавили путь этой библиотеки к пути включения.

    Например, упомянутый ранее файл Zend Framework может содержать следующее:

    который не является ни включением ни по относительному пути, ни по абсолютному пути. Предполагается, что каталог Zend Framework был добавлен в путь включения.

    2. SELinux

    Если вы работаете в Security-Enhanced Linux, это может быть причиной проблемы, так как вы отказываете в доступе к файлу с сервера.

    Чтобы проверить, включен ли SELinux в вашей системе запустите sestatus команда в терминале. Если команда не существует, значит, SELinux отсутствует в вашей системе. Если он существует, то он должен сказать вам, применяется ли он или нет.

    Чтобы проверить, являются ли политики SELinux причиной для проблемы, вы можете попробовать отключить его временно. Однако будьте осторожны, так как это полностью отключит защиту. Не делайте этого на вашем производственном сервере.

    Если у вас больше нет проблемы с выключенным SELinux, то это является основной причиной.

    Чтобы решить это, вам нужно будет настроить SELinux соответственно.

    Следующие типы контекста будут необходимы:

    В любом случае может быть множество причин, по которым SELinux будет отказывать в доступе к файлу, в зависимости от ваших политик. Так что вам нужно будет узнать об этом. Вот руководство по настройке SELinux для веб-сервера.

    3. Symfony

    Если вы используете Symfony и сталкиваетесь с этой ошибкой при загрузке на сервер, возможно, кэш приложения не был сброшен, либо потому, что app/cache был загружен, или этот кэш не был очищен.

    4. Не ACSII символы внутри Zip-файла

    По-видимому, эта ошибка может произойти и при вызове zip->close() когда в некоторых файлах внутри zip есть не-ASCII символы в имени файла, такие как «é».

    Кредиты для Фран кано для выявления и предложения решения этой проблемы

    Другие решения

    Чтобы добавить (действительно хороший) существующий ответ

    Попросите администратора вашего сервера проконсультироваться с руководством по использованию программного обеспечения хостинга и веб-сервера, которое они используют.

    Часто люди решают проблему с разрешениями, выполняя следующее (пример Linux)

    Это не разумная идея, потому что файл или каталог теперь доступны для записи. Если вы являетесь владельцем сервера и являетесь единственным пользователем, то это не так уж важно, но если вы работаете в среде общего хостинга, вы только что предоставили всем доступ к своему серверу.

    Что вам нужно сделать, это определить пользователей, которым требуется доступ, и предоставить доступ только тем, кому они. Как только вы знаете, каким пользователям нужен доступ, вам нужно убедиться, что

    Этот пользователь владеет файлом и, возможно, родительский каталог (особенно родительский каталог, если вы хотите записать файлы). В большинстве сред общего хостинга это не будет проблемой, потому что ваш пользователь должен владеть всеми файлами под вашим корнем. Пример Linux показан ниже

    Пользователь и только этот пользователь имеет доступ. В Linux хорошей практикой будет chmod 600 (только владелец может читать и писать) или chmod 644 (владелец может писать, но каждый может читать)

    Предупреждение:
    включают(D: /MyProjects/testproject//functions/connections.php):
    не удалось открыть поток:

    Вы можете легко увидеть, где проблемы. Проблемы // перед функциями

    Так что просто удалите накладную / из include, и она должна работать нормально. Что интересно, это поведение отличается в разных версиях. Я запускаю один и тот же код на ноутбуке, Macbook Pro и на этом ПК, пока все работало нормально. Надеюсь, это кому-нибудь поможет.

    1. Скопируйте файл в браузере, чтобы убедиться, что файл существует. Иногда файлы неожиданно удаляются (случилось со мной), и это также было проблемой в моем случае.

    Другая возможная причина: переименование и / или перемещение файлов в текстовом редакторе. Я прошел все вышеописанные шаги безуспешно, пока не удалил файл, который продолжал выдавать эту ошибку, и создал новый, который исправил проблему.

    Система не видит звуковую карту. (Проблемы с настройкой звука в Debian 6.05 squeeze)

    Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

    Модератор: Bizdelnick

    Система не видит звуковую карту.

    Нет звука в системе Debian Linux 6.05 32-bit.
    Установлено в системе: alsa-1.0.23+dfsg-2 и pulseaudio-0.9.21-3+squeeze1.

    Звуковая карта есть:

    $lspci | grep Audio 00:14.2 Audio device: ATI Technologies Inc IXP SB4x0 High Definition Audio Controller (rev 01)

    Вывод команды lspci -v:

    $ lspci -v . 00:14.2 Audio device: ATI Technologies Inc IXP SB4x0 High Definition Audio Controller (rev 01) Subsystem: Packard Bell B.V. Device c101 Flags: bus master, slow devsel, latency 64, IRQ 11 Memory at c0400000 (64-bit, non-prefetchable) [size=16K] Capabilities: <access denied> .

    Однако, звуковая карта не работает:

    $aplay ALSA lib confmisc.c:768:(parse_card) cannot find card '0' ALSA lib conf.c:3513:(_snd_config_evaluate) function snd_func_card_driver returned error: Нет такого файла или каталога ALSA lib confmisc.c:392:(snd_func_concat) error evaluating strings ALSA lib conf.c:3513:(_snd_config_evaluate) function snd_func_concat returned error: Нет такого файла или каталога ALSA lib confmisc.c:1251:(snd_func_refer) error evaluating name ALSA lib conf.c:3513:(_snd_config_evaluate) function snd_func_refer returned error: Нет такого файла или каталога ALSA lib conf.c:3985:(snd_config_expand) Evaluate error: Нет такого файла или каталога ALSA lib pcm.c:2184:(snd_pcm_open_noupdate) Unknown PCM default aplay: main:654: audio open error: Нет такого файла или каталога $alsamixer cannot open mixer: Нет такого файла или каталога

    Похоже, отсутствует файл звукового устройства:
    Spoiler

    Изображение

    Пункт графического меню оболочки GNOME "Система → Параметры → Звук" показывает следующее:

    Изображение

    Изображение

    Также нет каталога /proc/asound:

    $ls /proc/asound ls: невозможно получить доступ к /proc/asound: Нет такого файла или каталога

    Вывод файла /etc/modules:

    В Windows XP звук работал.
    Подскажите пожалуйста, как настроить звук.

    в консоли
    вку́пе (с чем-либо)
    в общем
    вообще
    в течение (часа)
    новичок
    нюанс
    по умолчанию
    приемлемо
    проблема
    пробовать
    трафик
    $ lspci -kns 00:14.2 00:14.2 0403: 1002:437b (rev 01) Subsystem: 1631:c101 Как видно (точнее, не видно), ни один драйвер не подцепился. А должен был бы snd_hda_intel. Проверьте, не попал ли он в блеклист, например: grep snd_hda_intel /etc/modprobe.d/* . И ещё покажите dmesg | grep -C5 snd .
    в консоли
    вку́пе (с чем-либо)
    в общем
    вообще
    в течение (часа)
    новичок
    нюанс
    по умолчанию
    приемлемо
    проблема
    пробовать
    трафик

    А какое у Вас железо-- у меня такое было с intei h55 + i core 3

    А какое у Вас железо-- у меня такое было с intei h55 + i core 3

    Как видно (точнее, не видно), ни один драйвер не подцепился. А должен был бы snd_hda_intel. Проверьте, не попал ли он в блеклист, например: grep snd_hda_intel /etc/modprobe.d/* . И ещё покажите dmesg | grep -C5 snd .

    Изображение

    Если вручную подцепить - работает? modprobe snd_hda_intel
    в консоли
    вку́пе (с чем-либо)
    в общем
    вообще
    в течение (часа)
    новичок
    нюанс
    по умолчанию
    приемлемо
    проблема
    пробовать
    трафик
    Если вручную подцепить - работает? modprobe snd_hda_intel

    Изображение

    Пытался решить проблему так:

    Пробовал менять на =y и перезагрузиться – не помогло

    После переустановки пакета linux-image (сделал через Synaptic) системные уведомления появились, но проигрыватели звук не воспроизводили. При запуске приложений, использующих звук, ошибки вроде:

    $supertux . ALSA lib pcm.c:7148:(snd_pcm_recover) underrun occured .

    Команда alsamixer работала, каталог /proc/asound появился, в каталоге /dev появилось устройство audio

    По-прежднему ничего не выдаёт

    Команда lsmod выдаёт следующее:
    Spoiler

    Изображение

    В меню Система → Параметры → Звук, на вкладке “Выход” по-прежднему одно устройство – Dummy Output.

    По совету с одного форума снёс

    /.pulse
    Не помогло

    После чего переустановил пакеты:

    При проигрывании файла командой aplay выдаёт шум.
    $ cat music.mp3 > /dev/aduio – результат тот же

    Короче говоря, проблема частично решена, но воспроизведение музыки так и не работает.

    когда я запускаю приложение для Android на эмуляторе. Может ли кто-нибудь сказать мне, что может быть причиной этого?

    Я использую android-sdk-20 и ниже строки добавляются в AndroidManifest.xml

    Я также добавил строку:

    так как я думал, что может возникнуть проблема с записью на SD-карту.

    ОТВЕТЫ

    Ответ 1

    Это происходит потому, что вы не установили minSdkVersion или targetSdkVersion на свой компьютер. Я протестировал его прямо сейчас.

    Например, если у вас есть эти строки в вашем манифесте .xml:

    И вы установили только API17 на свой компьютер, он сообщит вам об ошибке. Если вы хотите протестировать его, попробуйте установить другую версию API (в данном случае API 8).

    Тем не менее, это не важная ошибка. Это не значит, что ваше приложение ошибочно.

    Извините за мое выражение. Английский язык не мой. Bye!

    Ответ 2

    Я думаю, что это проблема

    Немного фона

    Traceview - это графическое средство просмотра журналов выполнения, созданных с помощью класса Debug для записи информации о трассировке в вашем коде. Traceview может помочь вам отладить ваше приложение и профилировать его производительность. Включение этого файла создает файл .trace в корневой папке sdcard, который затем может быть извлечен ADB и обработан файлом batview traceview для обработки. Он также может быть добавлен DDMS.

    Это система, внутренне используемая регистратором. В общем случае, если вы не используете traceview для извлечения файла трассировки, эта ошибка не должна вас беспокоить. Вы должны посмотреть на ошибки/журналы, напрямую связанные с вашим приложением

    Как включить его:

    • Включите класс Debug в свой код и вызовите его методы, такие как startMethodTracing() и stopMethodTracing() , для запуска и остановки запись информации трассировки на диск. Эта опция очень точная потому что вы можете точно указать, с чего начать и прекратить протоколирование трассировки данных в вашем коде.

    • Используйте функцию профилирования методов DDMS для генерации журналов трассировки. Эта опция менее точная, потому что вы не изменяете код, а скорее указать, когда запускать и останавливать ведение журнала с помощью DDMS. Хотя у вас есть меньше контроля над тем, где начинается и останавливается ведение журнала, эта опция полезно, если у вас нет доступа к коду приложения, или если вы не нужно точное время регистрации.

    Но для вышеуказанного

    существуют следующие ограничения:

    Если вы используете класс Debug, ваше приложение должно иметь разрешение на запись на внешнее хранилище ( WRITE_EXTERNAL_STORAGE ).

    Если вы используете DDMS: Android 2.1 и более ранние устройства должны иметь SD карты, и ваша заявка должна иметь разрешение на запись в SD Card. Android 2.2 и более поздние устройства не нуждаются в SD-карте. файлы журнала трассировки передаются непосредственно на вашу машину разработки.

    Таким образом, по существу доступ к traceFile требует двух вещей

    1.) Разрешение написать файл журнала трассировки, т.е. WRITE_EXTERNAL_STORAGE и READ_EXTERNAL_STORAGE для хорошей оценки

    2.) Эмулятор с SDCard с достаточным пространством. Документ не говорит, что если это только для DDMS, но также и для отладки, поэтому я предполагаю, что это также верно для отладки через приложение.

    Что мне делать с этой ошибкой:

    Теперь ошибка, по сути, является изъятием либо отсутствия пути sdcard для создания файла трассировки, либо отсутствия разрешения на его доступ. Это старый поток, но разработчик за щедростью, проверьте, соответствуют ли эти две предпосылки. Затем вы можете найти файл .trace в папке sdcard в своем эмуляторе. Если он существует, он не должен давать вам эту проблему, если он не пытается создать его, добавив startMethodTracing в ваше приложение.
    Я не уверен, почему он автоматически ищет этот файл, когда записывает журнал. Я думаю, что когда происходит событие ошибки/журнала, регистратор внутренне пытается записать в файл трассировки и не находит его, и в этом случае он выдает ошибку. Просматривая документы, я не нахожу слишком много ссылок на то, почему это происходит автоматически. Но в целом это не влияет на вас напрямую, вы должны проверить прямые журналы/ошибки приложения. Кроме того, в отличие от Android 2.2 и более поздних устройств не требуется SD-карта для ведения журнала DDMS. Файлы журнала трассировки передаются непосредственно на вашу машину разработки.

    Дополнительная информация о Traceview:

    Копирование файлов трассировки на хост-машину

    После запуска приложения и система создала ваши файлы трассировки .trace on устройства или эмулятора, вы должны скопировать эти файлы в свою разработку компьютер. Вы можете использовать adb pull для копирования файлов. Вот пример который показывает, как скопировать файл примера calc.trace из значения по умолчанию расположение эмулятора в каталоге /tmp на хосте эмулятора машина:

    adb pull/sdcard/calc.trace/tmp Просмотр файлов трассировки в Traceview To запустите Traceview и просмотрите файлы трассировки, введите traceview, Например, чтобы запустить Traceview в файлах примеров скопированный в предыдущем разделе, используйте:

    traceview/tmp/calc Примечание. Если вы пытаетесь просмотреть журналы трассировки приложение, которое встроено в ProGuard (режим выпуска build), некоторые методы и имена членов могут быть запутаны. Вы можете использовать файл proguard mapping.txt, чтобы выяснить исходный unobfuscated имена. Для получения дополнительной информации об этом файле см. Proguard документация.

    Ответ 3

    Попробуйте удалить файл формы uses-sdk AndroidManifest.xml . это сработало для меня!

    Не используйте Android Virtual Device с слишком низкой конфигурацией. Пусть он будет средним.

    Ответ 4

    Запишите все свои коды под этими двумя строками: -

    Он работал у меня без повторной установки снова.

    Ответ 5

    Я не хотел переустанавливать все, потому что у меня так много версий SDK, и моя среда разработки настроена правильно. При повторном подключении он занимает слишком много времени.

    Что сработало для меня, так это удаление, а затем повторное создание Android Virtual Device, конечно же, чтобы установить значение для SD Card Size (я использовал 200 MiB).

    screenshot of the AVD creation screen

    Дополнительная информация:

    в то время как вышеупомянутое исправляет проблему временно, оно повторяется. Я просто попробовал свое приложение в Android Studio и увидел это в журнале вывода, который я раньше не заметил в Eclipse:

    Ответ 6

    Нет звука после установки или маленький How-To

    Модератор: adventurer

    Нет звука после установки или маленький How-To

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

    Выручала установка PulseAudio. Это кроссплатформенный звуковой сервер, предоставляющий бóльшие возможности, по сравнению со стандартным набором драйверов и утилит, так же известных как ALSA.
    Для установки pulseaudio вводим одну единственную команду:

    Lubrox писал(а): А звуковуха какая? Почему сразу не пишем? 00:01.1 Audio device: ATI Technologies Inc Wrestler HDMI Audio [Radeon HD 6250/6310]
    00:14.2 Audio device: ATI Technologies Inc SBx00 Azalia (Intel HDA) (rev 40)

    При настройке alsamixer необходимо не только всё включить, но , возможно, кого-то и выключить.

    У меня, например,
    Lubuntu 11.10

    lspci | grep audio
    00:1e.2 Multimedia audio controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Audio Controller (rev 04)

    Но вот беда: этот параметр alsamixer-а не сохраняется!
    Приходится каждый раз после входа выполнять вышеозначенную команду.

    Что делал:
    добавил в /usr/bin/ такой скрипт:

    Кто в курсе- поправте!

    mutaborus писал(а): Но вот беда: этот параметр alsamixer-а не сохраняется!

    После того как выполнены настройки командой 'amixer'(консольный миксер) их необходимо сохранить командой
    alsactl store <ИмяКарты>

    Узнать имя карты можно так:

    Сохранить настройки миксера таким образом можно так:

    ЗЫ: По идее, при старте системы. гдето в недрах штатных стартовых скриптов (/etc/apm/) должна выполняться команда которая и инициализирует миксер
    alsactl restore
    Сами настройки миксера обычно сохраняются в файл
    /var/lib/alsa/asound.state
    Проверьте.

    256MB_RAM писал(а): После того как выполнены настройки командой 'amixer'(консольный миксер) их необходимо сохранить командой
    alsactl store . ls -l /proc/asound/ | grep '^l'
    lrwxrwxrwx 1 root root 5 2012-02-28 18:35 ICH6 -> card0 А содержание файла /var/lib/alsa/asound.state осталось как было control.34 <
    iface MIXER
    name 'External Amplifier'
    value true
    comment <
    access 'read write'
    type BOOLEAN
    count 0
    >
    >

    value true сменил на false.
    Тоже ничего не дало
    Сброс настройки External происходит по выходу из сессии.

    И что характерно:
    Все изменения в переключателях-ползунках Alsamixer сохраняются автоматически- без дополнительных телодвижений- просто после выхода из Alsa.
    Кроме External Amplifier !

    и всетаки попробуем еще раз.
    $ amixer sset 'External Amplifier' off
    Убеждаемся что он off.
    Сохраняем конфигурацию.
    $ sudo alsactl store
    Теперь "портим" звук .
    $ amixer sset 'External Amplifier' on
    и просто "восстанавливаем" обратно сохраненную конфигурацию.
    $ sudo alsactl restore
    После чего
    $ amixer sget 'External Amplifier'
    Должно быть off.
    Если это так, то сохранение/восстановление работает.

    По идее при старте системы настройки миксера(amixer) должны восстанавливаться именно путем запуска alsactl restore из стартовых скриптов. Однако данные знания почерпнуты мною
    при работе с неким чисто консольным Embedded Linux в котором кроме amixer ничего и не было.
    Потому рискну предположить что настройки низкоуровневого amixer "ктото портит сверху", ну мож GUI-миксер или pulseaudio.
    Возможно стоит попытаться забанить запуск всяких микшеров и pulseaudio и в итоге добиться
    чтобы работали самые примитивные и низкоуровневые консольные вещи, такие как:
    * 'alsactl store' и 'alsactl restore'
    * 'amixer'
    * 'arecord' и 'aplay'

    А после этого уже разбираться с высокоуровневыми микшерами и pulseaudio.

    Насколько я понимаю, alsamixer это почти тот же amixer, но с ncurses интерфейсом и он наверно делает store и restore и как вы пишите делает это он некорректно, т.к. не сохраняет настройки External Amplifier так что не используйте его пока не добъетесь работоспособности в консольных alsactl, amixer и aplay.

    В PHP скриптах, вызывая include() , require() , fopen() или их производные, такие как include_once , require_once или даже move_uploaded_file() , часто появляются ошибки или предупреждения:

    Не удалось открыть поток: нет такого файла или каталога.

    Как быстро найти первопричину проблемы?

    Ответ 1

    Есть много причин, по которым можно столкнуться с этой ошибкой, и поэтому я дам контрольный список того, что необходимо проверить в первую очередь для решения этой ситуации.

    Предположим, у нас есть следующая строка:

    require "/path/to/file"

    Контрольный список

    1. Проверьте путь к файлу на предмет опечаток

    • проверьте вручную (визуально проверив путь) ;

    • переместите все, что вызывается с помощью require* или include* в переменную, скопируйте ее и попробуйте получить к ней доступ с терминала:

    2. Убедитесь, что путь к файлу правильный с точки зрения относительного и абсолютного пути

    • если он начинается с косой черты "/", то это относится не к корню папки вашего веб-сайта (корень документа), а к корню вашего сервер :

      • например, каталог вашего веб-сайта может быть /users/tony/htdocs ;

      • не относительно пути к корню вашего веб-сайта или файла ;

      • или всегда используйте абсолютные пути к файлам .

      1. используйте require __DIR__."/relative/path/from/current/file" , который возвращает каталог текущего файла ;

      2. определите SITE_ROOT константу самостоятельно:

        • в корне каталога вашего веб-сайта создайте файл, например , config.php

        • в config.php напишите :

      • в каждом файле, в котором вы хотите сослаться на корневую папку сайта, включите config.php и затем используйте SITE_ROOT константу везде, где хотите:

      3. Проверьте свои пути включения

      Другой способ включения файлов, ни относительный, ни абсолютный, - это полагаться на путь включения . Это часто бывает с библиотеками или фреймворками, такими как, например, Zend framework.

      Подобное включение будет выглядеть так:

      include "Zend/Mail/Protocol/Imap.php"

      В этом случае вы должны убедиться, что папка, в которой находится «Zend», является частью пути включения.

      Это можно проверить с помощью:

      echo get_include_path();

      Вы можете добавить в него папку с помощью:

      set_include_path(get_include_path().":"."/path/to/new/folder");

      4. Убедитесь, что у вашего сервера есть доступ к этому файлу

      Может случиться так, что у пользователя, запускающего серверный процесс (Apache или PHP), просто нет разрешения на чтение или запись в этот файл.

      Чтобы проверить, под каким пользователем запущен сервер, можно использовать posix_getpwuid :

      $user = posix_getpwuid(posix_geteuid());

      var_dump($user);

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

      ls -l <path/to/file>

      5. Проверьте настройки PHP

        • Если установлено, PHP не сможет получить доступ к любому файлу за пределами указанного каталога (даже через символическую ссылку).

        • По умолчанию не устанавливается, и в этом случае ограничений нет.

        • Можно проверить, вызвав phpinfo() или используя ini_get("open_basedir") .

        • Вы можете изменить настройку, отредактировав файл php.ini или файл httpd.conf.

        • Е сли включено, могут быть ограничения. Однако данный режим был удален в PHP 5.4. Если вы все еще используете версию, которая поддерживает безопасный режим, обновитесь до версии PHP, которая это еще поддерживает .

        • О тносится только к включению или открытию файлов через сетевой процесс, такой как http://, но не работает для локальной файловой системы.

        • Э ти опции можно проверить, используя ini_get("allow_url_include") или установи в с помощью ini_set("allow_url_include", "1") .

      Другие случаи

      Если ничего из вышеперечисленного не помогло диагностировать проблему, могут возникнуть следующие особые ситуации:

      1. Включение библиотеки на основе пути включения

      Может случиться так, что вы подключаете библиотеку, например, платформу Zend, используя относительный или абсолютный путь. Например:

      require "/usr/share/php/libzend-framework-php/Zend/Mail/Protocol/Imap.php"

      Но по-прежнему получаете такую же ошибку.

      Это могло произойти из-за того, что файл, который вы (успешно) включили, сам имеет оператор include для другого файла, и этот второй оператор include предполагает, что вы добавили путь этой библиотеки к пути включения.

      Например, упомянутый ранее файл фреймворка Zend может включать следующее:

      include "Zend/Mail/Protocol/Exception.php"

      что не является включением ни по относительному пути, ни по абсолютному пути. Предполагается, что каталог фреймворка Zend был добавлен в путь включения.

      В таком случае единственное практическое решение - добавить каталог в ваш путь включения.

      2. SELinux

      3. Symfony

      Если вы используете Symfony и получаете эту ошибку при загрузке на сервер, возможно, к э ш приложения не был сброшен, либо потому, что app/cache был загружен, либо этот к э ш не был очищен.

      Для этого надо выполнить следующую консольную команду:

      cache:clear

      4. Внутри Zip-файла символы, отличные от A SC II

      По-видимому, эта ошибка может произойти также при вызове zip->close(), когда некоторые файлы внутри zip имеют в своем имени не-ASCII символы, такие как, например, «é».

      Потенциальное решение - обернуть имя файла, используя utf8_decode(), перед созданием целевого файла.

      Ответ 2

      В дополнение к предыдущему ответу:

      Программное обеспечение для виртуального хостинга

      Права доступа к файлам

      1. Этот пользователь владеет файлом и, возможно, родительским каталогом (особенно родительским каталогом, если вы хотите записывать файлы). В большинстве сред общего хостинга это не будет проблемой, потому что ваш пользователь должен владеть всеми файлами под вашим корневым каталогом.

      2. В Linux хорошей практикой будет использова ние chmod 600 (только владелец может читать и писать) или chmod 644 (владелец может писать, но все могут читать) .

      Ответ 3

      Samba Shares

      Если у вас есть тестовый сервер Linux и вы работаете из клиента Windows, общий ресурс Samba мешает команде chmod . Даже если вы используете:

      chmod -R 777 myfolder

      со стороны Linux вполне возможно, что Unix Group\www-data все еще не будет иметь доступ на запись. Есть рабочее решение : если ваш общий ресурс настроен так, что администраторы Windows сопоставлены с корневым каталогом – в Windows откройте разрешения, отключите наследование для вашей папки с копией, а затем предоставьте полный доступ для www-данных.

      Мы будем очень благодарны

      если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.

      Читайте также: