Ответ 1
Изменить путь к сеансу, в котором вы можете записать данные или обратиться к администратору сервера-сервера о проблеме /tmp
когда я загрузил script на сервер, я получил эту ошибку
Предупреждение: Неизвестно: открытый (/TMP/sess_58f54ee6a828f04116c2ed97664497b2, O_RDWR) не удалось: разрешение отклонено (13) в Unknown в строке 0
Предупреждение: Неизвестно: не удалось написать данные сеанса (файлы). Пожалуйста, подтвердите что текущая установка session.save_path правильный (/tmp) в Неизвестно в строке 0
ошибка появилась, когда я вызываю session_start();
хотя я установил разрешение папки /tmp на 777.
Изменить путь к сеансу, в котором вы можете записать данные или обратиться к администратору сервера-сервера о проблеме /tmp
вам нужно будет изменить свою директиву session.save_path
php.ini
Вы можете сделать это, используя session_save_path
Если у вас есть доступ к SSH, вот как исправить разрешение и право собственности
sudo chown -R NAME_OF_USER /tmp
Заменить NAME_OF_USER пользователем, под которым запускается php. Вы можете найти его, просто поместив эти строки в файл php:
$processUser = posix_getpwuid(posix_geteuid());
print $processUser['name'];
exit;
Кроме того, вы можете использовать ini_set('session.save_path', '/dir/here');
, если у вас есть доступ к этой функции. Другие возможные способы действительны.
У меня была точно такая же проблема с одним из моих PHP-скриптов, и я был похож на то, что я сломал, потому что он работал отлично за день до этого, и я запускаю его с моей локальной локальной машины Puppy Linux, чтобы он не даже хост или что-то еще.
Единственное, что я делал до этого, - это заставить Java работать в веб-браузере, поэтому некоторые из них мне удалось заставить Java работать, но сломал PHP - oops!
В любом случае я помнил, что, пытаясь заставить Java работать, я удалил содержимое папки /tmp, чтобы уничтожить все, что может вызвать проблему (на самом деле это получилось с Java. Я использовал старый плагин oij с новый Firefox)
Чтобы решить эту проблему, я открыл Диспетчер файлов Rox, перешел в папку/и щелкнул правой кнопкой мыши на tmp folder -> Mount Point 'tmp' and clicked properties
.
Я заметил, что разрешения были установлены как Owner - Read, Write, Exec, но Group и World были установлены только в Read и Exec, а не в Write. Я поставил галочку в "Запись" для группы и мира, и теперь PHP снова работает отлично.
Я не знаю, в какой момент разрешения для tmp должны были измениться, но для использования PHP они должны иметь права на запись.
Убедитесь, что вы не работаете в проблемах с диском. Если все разрешения правильные (и 777 должны сделать это для вас), вы все равно можете получить эту ошибку (для некоторых версий PHP и Apache), если на диске недостаточно места для записи на диск.
У меня была эта проблема в следующей ситуации:
Заключение: по какой-то неуместной причине мне пришлось изменить мою версию PHP, и при переключении с сеансами вживую, сеансы повреждаются.
Я понимаю, что это старый пост, однако я просто столкнулся с этой проблемой и нашел легкое решение.
Для меня проблема произошла с одним из моих сайтов, развернутых локально. Я не пробовал обращаться к сайтам с использованием других браузеров, но это происходило каждый раз, когда я пытался получить доступ к этому сайту через Chrome. Я решил войти в инструменты разработчика Chrome, на вкладке приложения, и щелкнуть "Очистить хранилище". Вуала - все снова работает как волшебство.
Надеюсь, это поможет кому-то еще!
Если:
Затем вы увидите эту ошибку, когда, например, процесс Apache PHP пытается запустить сбор мусора в файлах сеансов.
Исправления:
если вы используете веб-сервер Apache
, быстрое решение - перейти в вашу командную строку и ввести:
open /etc/apache2/
затем из открытого окна откройте файл с именем httpd.conf
и выполните поиск User
или Group
, чтобы изменить следующие две строки:
User _www
Group _www
Это связано с тем, что вы хотите, чтобы ваш сервер имел разрешение на каталоги ваших систем, особенно вы хотите изменить User
, или вы можете оставить свой Group
либо staff
, либо admin
.
Добавьте следующую строку
ini_set('session.save_path', getcwd() . '/tmp');
до
session_start();
У меня та же проблема разрешения, но в /var/lib/php/session/.
Чтобы исправить это, я удаляю файл и перезапускаю php-fpm.
rm -rf /var/lib/php/session/sess_p930fh0ejjkeeiaes3l4395q96
sudo service php5.6-fpm restart
Теперь все работает хорошо.
Для меня проблема кажется ошибкой WHM! У меня есть куча добавлений в доменах, и все работает нормально, но с поддоменом она приносит эту ошибку.
Странная вещь, но если я использую полный URL-адрес с основным доменом, он отлично работает:
main-domain.com/my.subdomain.com
Если я использую субдомен непосредственно, он приносит "Permission denied (13)":
my.subdomain.com
Дело в том, что все аддоны домена root:
/дом/хх/
Но для моего поддомена, не знаю, почему, корень: (у меня не должно быть доступа к этому директорию)
/
Итак, он действительно пытается достичь:/tmp вместо /home/xx/tmp
который также существует, но не имеет правильных разрешений
Чтобы прояснить это, примеры всего пути:
/дом/мой-счет/public_html
/дом/мой-счет/TMP
/TMP
Обходной путь, который я использовал, был:
session_save_path ( '/дом/мой-счет/TMP');
session_start();
Вначале у меня возникла эта проблема из-за того, что nginx владел расположением /tmp, а php-fpm выполнялся под пользователем и группой apache из-за www.conf. Я поменял пользователь/группу в этом файле, и тогда он работал нормально. Вы можете проверить <?php echo exec('whoami'); ?>
, чтобы проверить.
Использование PHP 5.6 Я уже использовал session_save_path(), чтобы указать на каталог в структуре домена. Он работал нормально, пока я не обновился до PHP 7.0, и в это время я получил отмеченную ошибку. В PHP.net Я нашел несколько комментариев, в которых указывалось, что назначение прямого пути не всегда работает, поэтому я использовал их предложение.
session_save_path(realpath(dirname($_SERVER['DOCUMENT_ROOT']) . '/../session'));
работал отлично. Не забудьте изменить /../session
на относительное местоположение вашего фактического каталога сеанса.