我前段时间下载了 PhpMyAdmin,但一直无法让它正常工作。请求 localhost/phpmyadmin 会给出 500 内部服务器错误响应,但错误日志中没有任何内容。
这些是我执行的步骤:
- 下载最新的 phpmyadmin 并将所有文件解压到 /var/vhosts/phpmyadmin/www/
- 在 nginx 上创建了一个新的 php5-fpm 池和一个服务器块
- 更改 phpmyadmin/ 内所有文件的所有者
- 尝试请求 localhost/phpmyadmin 和 localhost/phpmyadmin/setup
phpmyadmin 在 chroot 中运行,并且所有文件都归 www-data 所有,因此这不应该是权限错误。
我在同一目录中创建了一个新的 php 文件来产生错误,但它记录得很好,所以它只是 phpmyadmin。
这是我的 php5-fpm 池:
[phpmyadmin]
listen = /var/vhosts/phpmyadmin/tmp/.php.sock;
user = www-data
group = www-data
chroot = /var/vhosts/phpmyadmin/
chdir = /
php_admin_value[error_reporting] = E_ALL
php_admin_value[error_log] = error.log
php_admin_flag[log_errors] = on
php_admin_flag[display_errors] = on
php_value[session.save_handler] = files
php_value[session.save_path] = /tmp
Nginx 服务器块:
server {
listen 80;
root /var/vhosts/phpmyadmin/www;
server_name pma.domain;
location / {
try_files $uri $uri/ /index.html;
autoindex on;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
fastcgi_pass unix:/var/vhosts/phpmyadmin/tmp/.php.sock;
fastcgi_param SCRIPT_FILENAME /www$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT /www;
}
index index.html index.htm index.php;
try_files $uri $uri/ =404;
}
有什么想法可能出错了吗?为什么即使我强制打开它们,它也不会产生任何错误?
答案1
我找到了错误,现在我只需要找出如何修复它。在 common.inc.php 中有以下行:
date_default_timezone_set(@date_default_timezone_get());
由于 chroot(我认为无法读取 /usr/share/timezone),该函数无法工作,并且由于 @ 符号而无法产生错误。注释掉该行会产生致命错误:"date(): Timezone database is corrupt - this should never happen! in /www/libraries/core.lib.php on line 623"
。如果我找不到更好的解决方案,我想我必须将时区目录复制到我拥有的每个虚拟主机。
编辑:使用 php-pear 安装 timezonedb,以便能够使用时区,而无需将它们全部复制到 chroot 中。
答案2
您是否已将listen.owner
和listen.group
指令设置为该池的正确用户/组(通常是“www-data”)?
listen.owner = www-data
listen.group = www-data