无法解释的 PHP 错误(内部服务器错误 500)
Unexplained PHP error (Internal Server Error 500)
我最近将我的网站从共享网络主机移到了 VPS,并配置了 apache2/vsftpd 和其他东西。
经过一天的折腾,我终于可以正常工作了,但是,我在浏览器中加载 PHP 文件时遇到了问题。
PHP 没有显示任何错误,当我在 chrome 中点击 F12
时,我在加载时看到一个控制台日志闪烁说 GET: [mydomain]/api/myfile.php 500 (Internal Server Error)
我认为这与我试图在文件中执行的操作有关,但在表单所在的页面中并且 jQuery 正在调用它时它工作得很好。
但是,由于我想 return 特定的消息(并且只是那些消息),我希望它在一个空白页面上,这样我就可以将它们回显出来。
所以,我创建了一个新页面,通过 vsftpd
上传并用我的浏览器打开它,因为我没有发布任何我期望它回显 "No POST data" 的东西,就像我之前那样在未设置 $_POST['userStatus']
时执行此操作,但只有一个空白页面。
我尝试将文件更改为
<?php echo "Test"; ?>
但这也没有用。我遇到了同样的错误。
我想可能是www-data
的权限访问不了,
所以我做了 chown -R www-data /home/myuser/mysite/public_html
,并重新启动了 apache2,但仍然没有成功。
它实际上不允许我的 FTP 用户继续上传,所以我不得不 chown -R myuser /home/myuser/mysite/public_html
让它再次工作。
会不会是有权限的东西?也许在 apache 中配置错误?
我的 .htaccess
文件自上次正常工作以来一直没有更改,所以我不太确定这是否是罪魁祸首。
以防万一:
我是 运行 Debian Wheezy 上的 Apache2.2
我的 php.ini 文件设置为显示错误
我添加了 error_reporting(E_ALL)
和 ini_set('display_errors', 1)
但仍然没有错误
php -l myfile.php
returns No syntax errors detected in myfile.php
目前该文件仅包含 <?php echo "Test"; ?>
而仍然没有任何内容。
FTP 用户具有上传、覆盖、删除文件和 create/delete 目录的适当权限
我尝试删除 file/reuploading、重新启动 apache,并尝试以 root 身份创建文件(使用 vim
)
我已尝试 Empty Cache and Hard Reload
以确保它不只是加载页面的缓存版本
站点和子域的其余部分工作正常。
我的 /var/log/apache2/error.log
文件:
[Mon Jul 27 05:16:45 2015] [error] [client] PHP Warning: Unknown: failed to open stream: Permission denied in Unknown on line 0
[Mon Jul 27 05:16:45 2015] [error] [client] PHP Fatal error: Unknown: Failed opening required '/path/to/dir/api/myfile.php' (include_path='.:/usr/share/php:/usr/share/pear') in Unknown on line 0
我的 .htaccess
文件:
RewriteEngine On
Options -Indexes
ErrorDocument 404 https://my-main-site/404
ErrorDocument 403 https://my-main-site/404
ErrorDocument 500 https://my-main-site/500.shtml
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^u/(.*)$ /profile.php?user= [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^u/(.*)/friends$ /profile.php?user=&friends [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^404$ /x/includes/errors/404.php [L]
编辑:完全删除文件,并以 root 身份创建一个新文件(在浏览器中显示)。但是,我无法以 FTP 用户身份 over-write/alter 文件。
执行 chown www-data myFile.php
and/or chown myftpuser myFile.php
都会使文件无法再次加载。
我刚刚再次 chown 我的 ftp 用户 myFile.php 以将我的 ftp 用户返回 ownership/permissions 到该文件。
网站上的所有其他 files/directories 都归我的 ftp 用户所有,所以我不知道怎么会这样。
看起来您需要将您的 FTP 用户添加到 www-data 组并将您的项目组设为 readable/writeable。
我最近将我的网站从共享网络主机移到了 VPS,并配置了 apache2/vsftpd 和其他东西。
经过一天的折腾,我终于可以正常工作了,但是,我在浏览器中加载 PHP 文件时遇到了问题。
PHP 没有显示任何错误,当我在 chrome 中点击 F12
时,我在加载时看到一个控制台日志闪烁说 GET: [mydomain]/api/myfile.php 500 (Internal Server Error)
我认为这与我试图在文件中执行的操作有关,但在表单所在的页面中并且 jQuery 正在调用它时它工作得很好。
但是,由于我想 return 特定的消息(并且只是那些消息),我希望它在一个空白页面上,这样我就可以将它们回显出来。
所以,我创建了一个新页面,通过 vsftpd
上传并用我的浏览器打开它,因为我没有发布任何我期望它回显 "No POST data" 的东西,就像我之前那样在未设置 $_POST['userStatus']
时执行此操作,但只有一个空白页面。
我尝试将文件更改为
<?php echo "Test"; ?>
但这也没有用。我遇到了同样的错误。
我想可能是www-data
的权限访问不了,
所以我做了 chown -R www-data /home/myuser/mysite/public_html
,并重新启动了 apache2,但仍然没有成功。
它实际上不允许我的 FTP 用户继续上传,所以我不得不 chown -R myuser /home/myuser/mysite/public_html
让它再次工作。
会不会是有权限的东西?也许在 apache 中配置错误?
我的 .htaccess
文件自上次正常工作以来一直没有更改,所以我不太确定这是否是罪魁祸首。
以防万一:
我是 运行 Debian Wheezy 上的 Apache2.2
我的 php.ini 文件设置为显示错误
我添加了 error_reporting(E_ALL)
和 ini_set('display_errors', 1)
但仍然没有错误
php -l myfile.php
returns No syntax errors detected in myfile.php
目前该文件仅包含 <?php echo "Test"; ?>
而仍然没有任何内容。
FTP 用户具有上传、覆盖、删除文件和 create/delete 目录的适当权限
我尝试删除 file/reuploading、重新启动 apache,并尝试以 root 身份创建文件(使用 vim
)
我已尝试 Empty Cache and Hard Reload
以确保它不只是加载页面的缓存版本
站点和子域的其余部分工作正常。
我的
/var/log/apache2/error.log
文件:
[Mon Jul 27 05:16:45 2015] [error] [client] PHP Warning: Unknown: failed to open stream: Permission denied in Unknown on line 0
[Mon Jul 27 05:16:45 2015] [error] [client] PHP Fatal error: Unknown: Failed opening required '/path/to/dir/api/myfile.php' (include_path='.:/usr/share/php:/usr/share/pear') in Unknown on line 0
我的 .htaccess
文件:
RewriteEngine On
Options -Indexes
ErrorDocument 404 https://my-main-site/404
ErrorDocument 403 https://my-main-site/404
ErrorDocument 500 https://my-main-site/500.shtml
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^u/(.*)$ /profile.php?user= [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^u/(.*)/friends$ /profile.php?user=&friends [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^404$ /x/includes/errors/404.php [L]
编辑:完全删除文件,并以 root 身份创建一个新文件(在浏览器中显示)。但是,我无法以 FTP 用户身份 over-write/alter 文件。
执行 chown www-data myFile.php
and/or chown myftpuser myFile.php
都会使文件无法再次加载。
我刚刚再次 chown 我的 ftp 用户 myFile.php 以将我的 ftp 用户返回 ownership/permissions 到该文件。
网站上的所有其他 files/directories 都归我的 ftp 用户所有,所以我不知道怎么会这样。
看起来您需要将您的 FTP 用户添加到 www-data 组并将您的项目组设为 readable/writeable。