Подтвердить что ты не робот

Как я могу исправить ошибку разрешения при вызове session_start()?

когда я загрузил script на сервер, я получил эту ошибку

Предупреждение: Неизвестно: открытый (/TMP/sess_58f54ee6a828f04116c2ed97664497b2, O_RDWR) не удалось: разрешение отклонено (13) в Unknown в строке 0

Предупреждение: Неизвестно: не удалось написать данные сеанса (файлы). Пожалуйста, подтвердите что текущая установка session.save_path правильный (/tmp) в Неизвестно в строке 0

ошибка появилась, когда я вызываю session_start(); хотя я установил разрешение папки /tmp на 777.

4b9b3361

Ответ 1

Изменить путь к сеансу, в котором вы можете записать данные или обратиться к администратору сервера-сервера о проблеме /tmp

http://php.net/manual/en/function.session-save-path.php

Ответ 2

вам нужно будет изменить свою директиву session.save_path php.ini

Вы можете сделать это, используя session_save_path

Ответ 3

Если у вас есть доступ к SSH, вот как исправить разрешение и право собственности

sudo chown -R NAME_OF_USER /tmp

Заменить NAME_OF_USER пользователем, под которым запускается php. Вы можете найти его, просто поместив эти строки в файл php:

$processUser = posix_getpwuid(posix_geteuid());
print $processUser['name'];
exit;

Ответ 4

Кроме того, вы можете использовать ini_set('session.save_path', '/dir/here');, если у вас есть доступ к этой функции. Другие возможные способы действительны.

Ответ 5

У меня была точно такая же проблема с одним из моих 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 они должны иметь права на запись.

Ответ 6

Убедитесь, что вы не работаете в проблемах с диском. Если все разрешения правильные (и 777 должны сделать это для вас), вы все равно можете получить эту ошибку (для некоторых версий PHP и Apache), если на диске недостаточно места для записи на диск.

Ответ 7

У меня была эта проблема в следующей ситуации:

  • Я заполнил некоторые сессии vars с помощью PHP
  • Пока сеанс был активным, я изменил с PHP 5.4 на 5.3 на моем хосте.
  • Перезагрузка страницы дала ошибку, описанную выше.
  • Reset версия PHP до 5.4 снова.
  • Используется session_unset(); и session_destroy(); для очистки текущего сеанса.
  • Изменена версия PHP до 5.3.
  • Теперь он работает снова.

Заключение: по какой-то неуместной причине мне пришлось изменить мою версию PHP, и при переключении с сеансами вживую, сеансы повреждаются.

Ответ 8

Я понимаю, что это старый пост, однако я просто столкнулся с этой проблемой и нашел легкое решение.

Для меня проблема произошла с одним из моих сайтов, развернутых локально. Я не пробовал обращаться к сайтам с использованием других браузеров, но это происходило каждый раз, когда я пытался получить доступ к этому сайту через Chrome. Я решил войти в инструменты разработчика Chrome, на вкладке приложения, и щелкнуть "Очистить хранилище". Вуала - все снова работает как волшебство.

Надеюсь, это поможет кому-то еще!

Ответ 9

Если:

  • session.gc_probability > 0
  • файлы сеанса создаются разными пользователями (например, root и apache).
  • файлы сеанса хранятся в одном месте (например,/var/lib/php/session)

Затем вы увидите эту ошибку, когда, например, процесс Apache PHP пытается запустить сбор мусора в файлах сеансов.

Исправления:

  • Переконфигурируйте PHP так, чтобы gc_probability равнялся 0 и выполнял задание cron, удаляя старый/устаревший файл (ы).
  • Каждый пользователь сохраняет свои файлы сеанса в разных местах (session_save_path() и т.д.).

Ответ 10

если вы используете веб-сервер Apache, быстрое решение - перейти в вашу командную строку и ввести:

open /etc/apache2/

затем из открытого окна откройте файл с именем httpd.conf и выполните поиск User или Group, чтобы изменить следующие две строки:

User  _www
Group _www

Это связано с тем, что вы хотите, чтобы ваш сервер имел разрешение на каталоги ваших систем, особенно вы хотите изменить User, или вы можете оставить свой Group либо staff, либо admin.

Ответ 11

Добавьте следующую строку

ini_set('session.save_path', getcwd() . '/tmp');

до

session_start(); 

Ответ 12

У меня та же проблема разрешения, но в /var/lib/php/session/.

Чтобы исправить это, я удаляю файл и перезапускаю php-fpm.

rm -rf /var/lib/php/session/sess_p930fh0ejjkeeiaes3l4395q96
sudo service php5.6-fpm restart

Теперь все работает хорошо.

Ответ 13

Для меня проблема кажется ошибкой 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();

Ответ 14

Вначале у меня возникла эта проблема из-за того, что nginx владел расположением /tmp, а php-fpm выполнялся под пользователем и группой apache из-за www.conf. Я поменял пользователь/группу в этом файле, и тогда он работал нормально. Вы можете проверить <?php echo exec('whoami'); ?>, чтобы проверить.

Ответ 15

Использование PHP 5.6 Я уже использовал session_save_path(), чтобы указать на каталог в структуре домена. Он работал нормально, пока я не обновился до PHP 7.0, и в это время я получил отмеченную ошибку. В PHP.net Я нашел несколько комментариев, в которых указывалось, что назначение прямого пути не всегда работает, поэтому я использовал их предложение.

session_save_path(realpath(dirname($_SERVER['DOCUMENT_ROOT']) . '/../session'));

работал отлично. Не забудьте изменить /../session на относительное местоположение вашего фактического каталога сеанса.