PHP-скрипт работает на одном сайте, но не на другом, на том же сервере

#php #apache #cpanel

Вопрос:

В настоящее время у меня есть сервер cPanel, у меня есть домен site1.com мы создали новый веб-сайт на сервере с помощью cPanel. Проблема в том, что наш скрипт, который использовался для создания сайта, запускается на тестовом сайте «site2.com» на том же сервере cPanel, но не запускается на новом сайте site1.com

Если сузили проблему до этой строки 18 в EditPage.php:

 header("Location: Login.php?Page=$PageToEdit"); 
 

Единственная разница, которую я вижу на сервере, заключается в том, что «site1.com» работает «PHP7.4 PHP-FPM» в панели управления и «site2.com» «PHP7.4» невозможно включить или выключить «PHP-FPM» в панели управления, так что же решает включить его для некоторых сайтов, а не для других? И зачем это вообще нужно, не имеет смысла. Я новичок, поэтому, пожалуйста, будьте конкретны, спасибо!

 SERVER:
cPanel Version  98.0 (build 6) - 
Apache Version  2.4.48 - 
PHP Version 7.4.22 - 
MySQL Version   10.3.31-MariaDB - Architecture  x86_64 - 
Operating System    linux - 
Kernel Version  3.10.0-1062.1.1.el7.x86_64
 

PHP — скрипт, который не работает:

 // (A) START SESSION
session_start();
 
// (B) LOGOUT REQUEST
if (isset($_POST['logout'])) { unset($_SESSION['user']); }
 
// (C) REDIRECT TO LOGIN PAGE IF NOT LOGGED IN
if (!isset($_SESSION['user'])) {
  header("Location: Login.php?Page=$PageToEdit");
  die();
}
 

Комментарии:

1. Так что же именно не работает — перенаправление? Вы проверили журналы ошибок?

2. Ошибка не возникает, просто получите белую страницу и этот источник: <!DOCTYPE html> <!DOCTYPE html><html> <html><head> <head><meta http-equiv=»Тип содержимого» содержимое=»текст/html; кодировка=windows-1252″> <meta http-equiv=»Тип содержимого» содержимое=»текст/html; кодировка=windows-1252″><заголовок>Онлайн-редактор<заголовок></заголовок> и все.

3. «ошибка не возникает, просто получите белую страницу» — и именно по этой причине вам нужно пойти и проверить файлы журнала! И убедитесь, что для сайтов с самого начала настроен надлежащий уровень отчетов об ошибках и ведения журнала.

4. если я обнулю: //заголовок(«Местоположение: Login.php?Страница=$PageToEdit»); //die(); это работает», но» пользователь обходит вход. и я даже удалил всю кодировку в «Login.php» чтобы повторить «Привет»; чтобы где-то закрепить возможность других ошибок.

5. Вам лучше сделать эти настройки через cpanel, чем непосредственно в коде. И снова мой вопрос: Вы уже проверили фактический журнал ошибок на сервере? Маловероятно, что вы получите ошибку 500, но тогда в журналах не будет никаких следов того, что на самом деле пошло не так.

Ответ №1:

Это потому, что сеанс не разрушает. Мы можем отменить сеанс с помощью этих функций.

 session_destroy();
$_SESSION = [];
 

Теперь это сработает. Ваш код должен выглядеть так

 // (A) START SESSION
session_start();

 // (B) LOGOUT REQUEST
if (isset($_POST['logout'])) { unset($_SESSION['user']); 
 session_destroy(); $_SESSION = []; }

 // (C) REDIRECT TO LOGIN PAGE IF NOT LOGGED IN
 if (!isset($_SESSION['user'])) {
     header("Location: Login.php?Page=".$PageToEdit);
     die();
 }
 

Комментарии:

1. Хорошо, теперь, по крайней мере, мы получаем сообщение об ошибке: Предупреждение: session_start(): Не удается запустить сеанс, когда заголовки уже отправлены /domain.com/code/system/library/EditPage.php в строке 13 Предупреждение: Невозможно изменить информацию о заголовке — заголовки уже отправлены (вывод запущен в /domain.com/code/system/library/EditPage.php:1) в /home/domain/public_html/domain.com/code/system/library/EditPage.php на линии 21

2. теперь вы используете функцию session_start() два раза на странице или в файле.

3. Вот что я сделал code // (А) НАЧАТЬ СЕАНС //session_start(); // (Б) ЗАПРОС НА ВЫХОД ИЗ СИСТЕМЫ, если (isset($_POST[‘выход из системы’])) { отменить($_SESSION[‘пользователь’]); session_destroy(); $_SESSION = []; } // (C) ПЕРЕНАПРАВЛЕНИЕ НА СТРАНИЦУ ВХОДА, ЕСЛИ ВЫ НЕ ВОШЛИ В СИСТЕМУ, если (!isset($_SESSION[‘пользователь’])) { заголовок(«Местоположение: Логин.php?Страница=».$PageToEdit); die(); }

4. ПОЛУЧИТЬ: Предупреждение: Невозможно изменить информацию о заголовке — заголовки уже отправлены (вывод запущен в /home//public_html/домен.com/код/система/библиотека/Страница редактирования.php:1) в /home/smldesign/public_html/domain.com/code/system/library/EditPage.php на линии 21

5. ИСПРАВЛЕНО! удален заголовок из Login.php СПАСИБО Мудассар!