PHPCMS支持https的修改

发表于2023-11-17 16:14:00来源于创想网页设计工作室

次点击[] [] [] [打印] [关闭窗口] [评论]

欢迎大家加入创想工作室QQ群 网络瘫痪上不了网?电脑出故障?找破解软件?加入创想工作室QQ群,向大神求助,一步解决问题!QQ群号码:326338868[点此获取更多QQ群]
很早之前就想把手头上几个phpcms网站改成https协议访问(也即是全站设置ssl),但一直都抽不时间,其实主要还是现在懒了。今天花了点时间在网上搜了些教程,操作中发现都不是太全,于是自己再补充了点分享出来给有需要的朋友吧。
 
这篇文章主要介绍“怎么让phpcms支持https”,在日常操作中,相信很多人在怎么让phpcms支持https问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么让phpcms支持https”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
 

一、站点设置部分。

 
如果要把现有的phpcms站点启用https协议,可登陆后台在“站点管理”和“基本设置”里修改,也可以直接对caches/configs/system.php中的配置选项做替换,将"http://"全部替换为"https://"。如有必要,数据库中已存在的链接也要完全替换为https开头。
 
另外如果PHPSSO通信不成功,一直先生通信中的话,检查下/phpso_server/caches/configs下的system.php文件,将"http://"全部替换为"https://"。
 

二、程序修改部分。

 
1、让站点域名支持https
 
(1)修改phpcms/modules/admin/site.php 大约45行和128行的正则
 
('/http://(.+)/$/i', $domain))
 
修改为
 
('/(http|https)://(.+)/$/i', $domain))
 
 
(2)修改phpcms/modules/admin/templates/setting.tpl.php 大约18行中的正则
 
http://(.+)[^/]$
 
修改为
 
http[s]?://(.+)[^/]$
 
(3)修改phpcms/modules/admin/templates/site_add.tpl.php 大约13行中的正则
 
http://(.+)/$
 
修改为
 
http[s]?://(.+)/$
 
(4)修改phpcms/modules/admin/templates/site_edit.tpl.php 大约11行中的正则
 
http://(.+)/$
 
修改为
 
http[s]?://(.+)/$
 
2、友链模块
 
(1)修改phpcms/modules/link/index.php 大约41行和51行中的正则
 
/^http://(.*)/i
 
修改为
 
/^http[s]?://(.*)/i
 
(2)修改phpcms/modules/link/templates/link_add.tpl.php 大约10行中的正则
 
^http://[A-Za-z0-9]+.[A-Za-z0-9]+[/=?%-&]*([^<>])*$
 
修改为
 
^http[s]?://[A-Za-z0-9]+.[A-Za-z0-9]+[/=?%-&]*([^<>])*$
 
(3)修改phpcms/modules/link/templates/link_edit.tpl.php 大约11行中的正则
 
^http://[A-Za-z0-9]+.[A-Za-z0-9]+[/=?%-&]*([^<>])*$
 
修改为
 
^http[s]?://[A-Za-z0-9]+.[A-Za-z0-9]+[/=?%-&]*([^<>])*$
 
3、扩展-来源
 
打开 phpcms/modules/admin/templates/copyfrom_add.tpl.php和copyfrom_edit.tpl.php
 
找到
 
^http://
 
改成
 
^http[s]?://
 
或改成
 
^(http(s)?:)?//(.+)/$
 
4、扩展-关联链接
 
打开 phpcms/modules/admin/templates/keylink_add.tpl.php和keylink_edit.tpl.php
 
找到
 
^http:
 
改成
 
^http[s]?:
 
或改成
 
^http(s)?://
 
经过上面修改后,出现后台文章列表分页以及文章URL会重复带有网站域名,我们继续修改。
 
5、后台文章列表分页URL
 
打开文件 phpcms/libs/functions/global.func.php,找到pageurl函数,没修改过的在784行,里面找到
 
$url = str_replace(array('http://','//','~'), array('~','/','http://'), $url);
 
改成
 
//增加判断是否https修改开始
if(substr($url,0,5)=="https"){
$url = str_replace(array('https://','//','~'), array('~','/','https://'), $url);
}
else{
$url = str_replace(array('http://','//','~'), array('~','/','http://'), $url);
}
//增加判断是否https修改结束
 
或是改成
 
$url = preg_replace(array('/^((w+):)?///', '//{2,}/', '/~/'), array('$1~', '/', '//'), $url);
 
6、后台文章URL
 
打开 /phpcms/modules/content/templates/content_list.tpl.php
 
97行找到
 
} elseif(strpos($r['url'],'http://')!==false) {
 
改成
 
} elseif(strpos($r['url'],'http://')!==false || strpos($r['url'],'https://')!==false) {
 
或是改成
 
} elseif(preg_match('/^(http(s)?:)?///', $r['url'])) {
 
打开 /phpcms/modules/content/templates/content_page.tpl.php
 
28行找到:
 
if(strpos($category['url'],'http://')===false)
 
改成
 
if(strpos($category['url'],'http://')===false || strpos($category['url'],'https://')===false)
 
或是改成
 
if(preg_match('/^(http(s)?:)?///', $category['url']))
 
7、修正重复上传图片及uploadfile生成空白目录
 
PHPCMS,PHPCMS保存远程图片
 
如上图,如果勾选了保存远程图片,则会在启用https后出现上述的重复上传附件的Bug问题,下面是修改方法。
 
打开 /phpcms/libs/classes/attachment.class.php文件中的function download()方法。
 
165行找到
 
if(strpos($file, '://') === false || strpos($file, $upload_url) !== false) continue;
 
改成
 
//判断是否同一域名,避免重复上传编辑器中的图片,修改开始
$filehost = parse_url(strtolower($file));
$uploadhost = parse_url(strtolower($upload_url));
if(strpos($file, '://') === false || strpos($file, $upload_url) !== false || $filehost['host'] == $uploadhost['host']) continue;
//判断是否同一域名,避免重复上传编辑器中的图片,修改结束
 
改了后我们发现已经不会重复保存图片,但在存放附件的uploadfile目录还是会生成空白的文件夹,我们再继续修改。
 
往上几行找到
 
if(strpos($matche, '://') === false) continue;
 
改成
 
//修复生成空白文件夹的Bug,修改开始
$filehost = parse_url(strtolower($matche));
$uploadhost = parse_url(strtolower($upload_url));
if(strpos($matche, '://') === false || $filehost['host'] == $uploadhost['host']) continue;
//修复生成空白文件夹的Bug,修改开始
 
严格按照以上步骤修改后,phpcms完美支持https,结合页面静态化和url伪静态规则,亲测静态页面也可用https,此时的网站实际上通过http和https都能访问。
 
注意:
 
a.如注册用户提示‘操作失败’,请在后台会员模块设置中关闭‘注册时可选会员模型’或者保证会员不少于两个会员模型
 
b.在PHP5.6或以上的PHP版本中会出现和PHPSSO无法正常通信的情况,因为PHP5.6及以上fsockopen和file_get_contents等函数openssl需要验证目标的SSL证书是否可信,需要安装openssl根证书才可以,否则openssl会报警告信息 证书验证失败!
 
如需在php5.6或以上版本中使用HTTPS的请参阅PHP官方有关php5.6和openssl的资料http://php.net/manual/en/migration56.openssl.php
 
补充:
 
经过以上所有步骤后,出现新的问题:通信正常但是无法注册会员账户及登陆。解决方法如下:
 
打开 /phpsso_server/api/uc_client/client.php
 
找到
 
$port = !empty($matches['port']) ? $matches['port'] : 80;
 
改成
 
$port = !empty($matches['port']) ? $matches['port'] : ($matches['scheme'] == 'https' ? 443 : 80);
 
打开 /phpsso_server/api/uc_client/model/misc.php
 
找到
 
$port = !empty($matches['port']) ? $matches['port'] : 80;
 
改成
 
$port = !empty($matches['port']) ? $matches['port'] : ($matches['scheme'] == 'https' ? 443 : 80);
 
打开 /phpcms/libs/classes/http.class.php
 
找到
 
$port = $matches['port'] ? $matches['port'] : 80;
 
改成
 
$port = !empty($matches['port']) ? $matches['port'] : ($matches['scheme']=='https' ? 443 : 80);
$protocol = ('https' == $matches['scheme']) ? 'ssl://' : '';
 
找到
 
$fp = @fsockopen($host, $port, $errno, $errstr, $timeout);
 
改成
 
$fp = @fsockopen($protocol.$host, $port, $errno, $errstr, $timeout);
 
打开 /phpsso_server/phpcms/libs/classes/http.class.php
 
找到
 
$port = $matches['port'] ? $matches['port'] : 80;
 
改成
 
$port = !empty($matches['port']) ? $matches['port'] : ($matches['scheme']=='https' ? 443 : 80);
$protocol = ('https' == $matches['scheme']) ? 'ssl://' : '';
 
打开 /phpcms/modules/member/classes/client.class.php里找到_ps_post函数
 
找到
 
$port = !empty($matches['port']) ? $matches['port'] : 80;
 
改成
 
$port = !empty($matches['port']) ? $matches['port'] : ($matches['scheme']=='https' ? 443 : 80);
 
到此,通过以上修改,基本解决了PHPCMCSV9兼容https的问题,至于为什么说基本,因为这里也有可能我尚未发现的地方,如果有可以在评论区告知一下,我更新上来。

© copyright 2002-2024, 22BA.COM All Rights Reserved

网站备案号:粤ICP备19114910号

ChuangXiang Design Studio - WebDesign & Internet Marketing

关于我们业务范围联系我们开心一刻网站地图

QQ群一:326338868QQ群二:78712271

QQ群三:193078177

邮箱:news@22ba.com

地址:深圳市福田区金田路现代国际大厦2606