PHP 脚本可在一个站点上运行,但不能在同一台服务器上运行

Posted

技术标签:

【中文标题】PHP 脚本可在一个站点上运行,但不能在同一台服务器上运行【英文标题】:PHP Script works on one site but not other, same server 【发布时间】:2021-11-05 06:58:16 【问题描述】:

�ˆ‘�›��‰�œ‰�€个 cPanel �œ�Š��™��Œ�ˆ‘�œ‰�€个�ŸŸ site1.com�Œ�ˆ‘们使�”� cPanel �œ��œ�Š��™��Š�ˆ›建�†�–��‘�™�€‚�—��˜�˜��ˆ‘们�”��Ž�ˆ›建�™�‚��š„�„š�œ��œ��Œ�€ cPanel �œ�Š��™��Š�š„�‹�•�™�‚��€œsite2.com�€�Š��Œ�Œ�†没�œ‰�œ��–��™�‚� site1.com �Š��Œ

�‚�žœ已�†�—��˜缩��ˆ� EditPage.php 中�š„第 18 �Œ�š

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

�ˆ‘��以�œ��œ�Š��™��Š�œ‹�ˆ��š„�”��€�Œ��ˆ��˜��€œsite1.com�€�œ� cPanel 中��Œ�€œPHP7.4 PHP-FPM�€�Œ�€Œ�€œsite2.com�€�€œPHP7.4�€没�œ‰�Šž�•�‰“�€�€œ PHP-FPM�€�œ� cPanel 中�‰“�€�ˆ–�…��—��Œ�‚��ˆ�˜��€�ˆ�†��š为�Ÿ�›�™�‚��€Œ��˜��…��–�™�‚��‰“�€�ƒ�Ÿ为�€�ˆ�”š�‡��œ€��ƒ�˜�没�œ‰�„�‰�š„�€‚�ˆ‘�˜��–��‰‹�‰€以请�…��“谢谢�

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();

�€�—��˜讨论�€‘�š

�‚��ˆ究�Ÿ�˜��€�ˆ�起�œ�”� - �‡�š�‘�Ÿ你�€�Ÿ��‡�”™误�—��—�—�Ÿ 没�œ‰�”™误���˜��—�€‹�€‹�ˆ��™�页�’Œ�™个����š �œ�线�–�‘�™�就�˜��™样�€‚ "no error is throwed just get white page" - �™就�˜�为�€�ˆ你�œ€��Ž��€�Ÿ��—��—�–‡件�š„�ŽŸ�›��并确�为�‘�™�…置正确�š„�”™误�Š��‘Š级�ˆ��’Œ�—��—记�•�€‚ �‚�žœ�ˆ‘�…空�š //header("Location: Login.php?Page=$PageToEdit"); //死�ˆ�‰;�ƒ��以�€œ�†�˜��€�”��ˆ��•�‡�™��•�€‚�ˆ‘�€�‡��ˆ��™��†�€œLogin.php�€中�š„�‰€�œ‰�–�以�›ž�˜��€œHello�€�›�œ��Ÿ�„巩�›��…��–�”™误�š„���ƒ��€��€‚ �‚��”该�€š�‡ 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();
 

【讨论】:

OK 现在至少我们得到一个错误:警告:session_start():当第 13 行的 /domain.com/code/system/library/EditPage.php 中的标头已发送时无法启动会话警告:无法修改标头信息 - 标头已由 /home/domain/public_html/domain.com/code/system/library/EditPage 中的(从 /domain.com/code/system/library/EditPage.php:1 开始的输出)发送。第21行的php 现在你在一个页面或文件中使用了 session_start() 函数两次。 这是我所做的code // (A) 开始会话 //session_start(); // (B) 注销请求 if (isset($_POST['logout'])) unset($_SESSION['user']); session_destroy(); $_SESSION = []; // (C) 如果未登录则重定向到登录页面 if (!isset($_SESSION['user'])) header("Location: Login.php?Page=".$PageToEdit);死(); GET:警告:无法修改标头信息 - 标头已由 /home//public_html/domain.com/code/system/library/EditPage.php:1 中的 /home 发送/smldesign/public_html/domain.com/code/system/library/EditPage.php 第 21 行 已修复!从 Login.php 中删除了头文件 感谢 Mudassar!

以上是关于PHP 脚本可在一个站点上运行,但不能在同一台服务器上运行的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 docker 和 nginx 在同一台服务器上运行多个站点?

IIS 页面可在 LAN 中远程访问,但不能在服务器本地访问

一台服务器上有多个站点,但只有一个站能用80端口

使用 Laravel Forge 在同一台服务器上创建多个队列

分发系统介绍 expect脚本远程登录 expect脚本远程执行命令 expect脚本传递参数

Laravel - 同一服务器上有两个站点的权限出错