我们正在升级我们在亚马逊上的服务器基础架构,并且我正在尝试将基于CodeIgniter(版本1.7.2)的PHP站点迁移到具有AmazonLinux作为操作系统的新服务器。以前的服务器是Ubuntu,在apache2上运行PHP 5.3.3-1ubuntu9.5。新的AmazonLinux服务器上的PHP版本是5.3.29,在httpd上运行。
当我尝试访问新服务器中的URL时,代码当前在此行的system/core/CodeIgniter.php
处停止:
$CI = new $class();
我无法在应用程序的虚拟主机中指定的httpd错误日志中看到任何相关的错误消息,也无法在默认的httpd错误日志中看到。使用lynx命令行客户端访问URL只显示内部服务器500错误,而通过常规浏览器访问只显示空白页面。
有什么想法吗?我知道Code Igniter版本已经很老了,大约在2009年。但它与我们在新服务器上运行的PHP 5.3兼容。这是遗留代码,并且会在某些时候消失,所以我们没有兴趣升级PHP或CI级别 - 除非我们被迫升级。
答案 0 :(得分:0)
问题原来是数据库访问问题。具体来说,新服务器上的PHP版本不支持对php-mysql API的弃用调用(例如@mysql_pconnect或@mysql_connect)
解决方案是
1)下载支持旧版调用的mysql库。对于AmazonLinux,这可以通过以下方式完成:
sudo yum install php-mysql
2)找到下载库的位置,例如
find / -name mysql.so
这可能也已在安装中显示,但这是一种随时查找它的方法。 YMMV,但就我而言,库名是:
/usr/lib64/php-zts/modules/mysql.so
3)更改php.ini(如从httpd / apached服务器上的php页面调用时的phpinfo中所示),如下所示:
a)更改“extension_dir”以显示mysql.so的安装位置:
extension_dir = "/usr/lib64/php-zts/modules"
b)然后添加以下行:
extension=mysqli.so
extension=mysql.so
extension=pdo_mysql.so
重新启动apache,你应该很高兴。
注意:不支持特定的旧版调用,这是我正在使用的CodeIgnitor版本的一部分,是:
return @mysql_pconnect($this->hostname, $this->username, $this-
php错误日志显示此错误:
PHP Fatal error: Call to undefined function mysql_connect() in xxx.php on line xx