使用新服务器的 Codeigniter 白页

Code Igniter White Page using new server

我在我的 Apache2 服务器上 运行 一个 CI 应用程序 PHP 版本“5.5.9-1ubuntu4.2”。一切正常。

现在,我安装了第二个 OpenLiteSpeed 网络服务器,它是 运行 PHP 版本“5.6.5”(我尝试过不同的版本)。此服务器 运行 与 apache 并行,但在不同的端口 (8088) 上。

每当我访问我的应用程序的 index.php 页面时,我都会看到一个白屏。我已经尝试添加默认的 welcome.php 控制器并查看并尝试 运行 它与 URL:

http://www.example.com:8088/app/index.php/welcome/
http://www.example.com:8088/app/index.php/welcome/index
http://www.example.com:8088/app/index.php
http://www.example.com:8088/app/index.php/app/ (my app controller)

...etc

一切都是白屏。如果我只是将 8088 从 URL 中拉出来(因此使用端口 80,我的 apache 服务器),一切运行完美。

我已经尝试将所有错误日志参数设置为最大值。我检查了我服务器的 error.log 和 access.log。我已经在我的 /app/application/logs/ 文件夹中检查了 CI 生成的日志。我已将 OpenLiteSpeed 设置为调试模式并阅读所有消息。我已经将php.ini中的"display_errors"设置为"On"并用php.info验证了。我已将应用程序的 index.php 设置为开发模式。

没有任何错误。

我的任何 php 文件中都没有短标签。我试过在 php.ini 中打开和关闭短标签,但没有效果。

OpenLiteSpeed 不使用任何 .htaccess 文件。我有一个 RewriteRule 可以将非 www 重写为 www。

我用了大约 16 小时 20 分钟来解决这个问题,进度为 0。

有什么建议吗?

编辑:尝试将 apache 的 php.ini 移至 OpenLiteSpeed 的 php。没有任何区别。

编辑:将其缩小到 "database" 和 "sessions" 的自动加载。删除这些自动加载可以解决问题,但数据库功能不再起作用。

编辑:在mysql_driver.php中找到了数据库连接函数。当然调用是@mysql_pconnect(...),@抑制错误,所以难怪我什么也没看到。在 php.ini 的两个地方重新启用 display_errors 后,我现在得到

Fatal error: Call to undefined function mysql_pconnect() in /var/www/html/CodeIgniter/database/drivers/mysql/mysql_driver.php on line 94

似乎 php 没有编译 mysql 支持。让我们重新编译。

编辑:问题已解决。 CI 的自动加载正在加载两个库 'database' 和 'session',这两个库都导致了白屏。当我删除它们时,错误就会消失。我不得不使用以下选项重新编译 PHP:

--enable-opcache --with-mysql --with-mysqli --with-zlib --with-gd --enable-shmop --enable-sockets --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-mbstring --with-iconv --with-libdir=lib64 --with-litespeed --with-curl --enable-zip --with-bz2 --with-jpeg-dir=lib64 --enable-bcmath --enable-calendar --enable-ftp --enable-gd-native-ttf --enable-exif --with-openssl --with-xmlrpc --with-freetype-dir=lib64 --with-png-dir=lib64 --enable-inline-optimization --enable-xml 

所以根本原因是配置不当PHP配置。但真正的问题是 CI 是一个糟糕的框架,无法正确显示错误信息以帮助您在问题发生时识别它们。信息就在那里,PHP 告诉你哪里出了问题,而 CI 最好将它隐藏起来,这样你不经过大约 20 小时的反复试验就永远无法弄清楚。超级.

找出答案。白屏是由于 "downloads" 和 "session" 库的自动加载引起的,它们在后台静默失败。我必须使用正确的选项重新编译 PHP 才能使其正常工作。

--enable-opcache --with-mysql --with-mysqli --with-zlib --with-gd --enable-shmop --enable-sockets --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-mbstring --with-iconv --with-libdir=lib64 --with-litespeed --with-curl --enable-zip --with-bz2 --with-jpeg-dir=lib64 --enable-bcmath --enable-calendar --enable-ftp --enable-gd-native-ttf --enable-exif --with-openssl --with-xmlrpc --with-freetype-dir=lib64 --with-png-dir=lib64 --enable-inline-optimization --enable-xml 

真正的问题是 CI 隐藏了所有错误消息,这些错误消息会使这个问题变得微不足道,而且仅仅找到被抑制的@就花费了大量时间 mysql_connection函数调用失败。