游客发表
现在去搜“php5下载”,跳出来的结果十有八九是让你装PHP 8的。这挺正常,PHP 5早在2018年底就停止维护了,官方连安全补丁都不再发。但问题是,真的还有人在用。
我上个月帮一个做外贸的朋友处理他公司的老系统,一套基于osCommerce搭的商城,跑在PHP 5.6上。服务器是CentOS 6,PHP版本是5.3。他问我能不能升级,我看了一眼代码里满屏的mysql_connect()和ereg_replace(),直接说:升级的成本够你重新写一套了。
所以PHP 5的下载需求是真实存在的。只是获取渠道变了。
php.net的下载页面现在只挂最新版本。但你如果非要找PHP 5,可以走两个路子。
一个是博物馆页面。php.net有个/releases/的归档目录,里面还留着5.6.40的源码包。这是PHP 5的最后一个版本,2018年12月发布的。Windows用户注意了,VC11和VC9的编译版本都能找到,但别指望有安装程序——只有zip包,解压了手动配。
另一个是各Linux发行版的软件源。CentOS 7的默认源里就是PHP 5.4,虽然版本老得掉牙,但胜在yum install php就能跑起来。Ubuntu的话得加ondrej的PPA,不过那个PPA现在也把PHP 5的支持砍了,只剩一些镜像站还留着deb包。
如果你在Windows上折腾PHP 5,有几个事得提前知道。
VC6和VC11的区别不是闹着玩的。PHP 5.5之前的Windows版本用VC6编译,之后用VC11。你下错了版本,Apache启动时直接给你弹个“无法加载php5apache2_4.dll”的框。我见过有人在这卡了一下午,最后发现下的是VC6的包配了VC11的Apache。
还有线程安全的问题。TS版本给Apache用,NTS版本给IIS或者FastCGI用。下反了不会立刻报错,但跑一段时间就莫名其妙崩溃。这个坑比版本号对不上更隐蔽。
成本。一套跑了十年的系统,代码量几十万行,用的框架早就不更新了。迁移到PHP 7意味着所有mysql_*函数要重写,所有构造函数命名要改,所有ereg正则要换成preg。这不是改几行配置的事。
我见过一个政府内部系统,2010年开发的,PHP 5.2配MySQL 5.0。服务器物理隔离,不连外网。这种情况下PHP 5的安全问题反而不是问题——它压根不暴露在公网。维护的人说:“能跑就行,换它干嘛。”
但如果是公网服务,还在用PHP 5就是另一回事了。5.6的最后一个安全补丁是2018年的,之后爆出的漏洞——比如CVE-2019-11043那个PHP-FPM的远程代码执行——PHP 5永远不会有官方修复。你只能自己打补丁或者上WAF硬扛。
Windows用户去windows.php.net的归档目录,找releases/archives/,里面有php-5.6.40-Win32-VC11-x64.zip。解压到C:\php,把php.ini-production改名为php.ini,打开extension_dir指向ext目录,再根据你用的Web服务器决定要不要开php5apache2_4.dll。
Linux用户更简单,编译安装:./configure --prefix=/usr/local/php5 --with-apxs2=/usr/local/apache/bin/apxs --with-mysql,然后make && make install。但记得把--with-mysql换成--with-mysqli或者PDO,mysql扩展在PHP 5.5之后就废弃了。
装完之后跑个php -v确认版本。如果显示的是5.6.40,那恭喜你,成功回到了2018年。
不过说真的,除非你有非用不可的理由,否则别碰PHP 5。新项目用PHP 8,老项目能迁就迁。实在迁不动的,至少把服务器隔离好,别让它见公网。这年头,跑PHP 5跟开一辆没有安全气囊的老车上高速差不多——能开,但出事就是大事。
友情链接