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

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

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

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

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

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

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

вам нужно будет изменить директиву 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, перешел в папку / и щелкнул правой кнопкой мыши по folder -> Mount Point 'tmp' and clicked properties tmp folder -> Mount Point 'tmp' and clicked properties .

Я заметил, что разрешения были установлены как Owner – Read, Write, Exec, но Group и World были установлены только в Read и Exec, а не в Write. Я поставил галочку в Write для группы и мира, и теперь PHP снова работает отлично.

Я не знаю, в какой момент разрешения для tmp должны были измениться, но для использования PHP они должны иметь права на запись.

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

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

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

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

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

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

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

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

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

до

 session_start(); 

Если :

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

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

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

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

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

 open /etc/apache2/ 

затем в открывшемся окне откройте файл httpd.conf и выполните поиск User или Group измените эти две строки на:

 User _www Group _www 

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

У меня такая же проблема с разрешением, но и в / 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» пользователем и группой из-за http://www.conf. Я поменял пользователь / группу в этом файле, и тогда он работал нормально. Вы можете проверить <?php echo exec('whoami'); ?> <?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 на относительное местоположение вашего фактического каталога сеанса.