Ptcms在php7.2.10下的调试,each等方法

在PHP7.2.10环境下,Ptcms安装时遇到mysql_connect不支持的问题,通过安装mysql扩展解决。调试过程中,发现each函数已废弃,用foreach替代,count函数参数必须为数组或实现Countable接口。此外,创建_function也被弃用,使用匿名函数代替。通过对代码的修改,成功解决了Ptcms在新版本PHP中的兼容性问题。
摘要由CSDN通过智能技术生成

1、安装报错,新版本php不支持mysql_connect;【安装支持老版本的mysql扩展始终报错HP Warning: PHP Startup: Unable to load dynamic library ‘mysql.so’ (tried: /usr/lib64/php/modules/mysql.so (/usr/lib64/php/modules/mysql.so: undefined symbol: mysqlnd_get_client_info), /usr/lib64/php/modules/mysql.so.so (/usr/lib64/php/modules/mysql.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0

(1)对安装index.php的数据库操作进行改写

public function successAction() 
	{  if (IS_POST)
	   { C($_POST);
         //$db = mysqli_connect($host,$user,$passwd,$database,$port);  
         //if (!@mysql_connect($_POST['mysql_master_host'].':'.$_POST['mysql_master_port'],$_POST['mysql_master_user'],$_POST['mysql_master_pwd']))
		 //$dbcon= mysqli_connect($_POST['mysql_master_host'],$_POST['mysql_master_user'],$_POST['mysql_master_pwd'],$_POST['mysql_master_name'],$_POST['mysql_master_port']);  
		
         $dbcon= mysqli_connect($_POST['mysql_master_host'],$_POST['mysql_master_user'],$_POST['mysql_master_pwd'],'webdb',$_POST['mysql_master_port']);
         // 检查连接 
         if (!$dbcon)
         {
           die("连接错误: " . mysqli_connect_error());
         }

        if (!@dbcon)
                 { $this->error('数据库帐号密码错误');
             }

		if (!@dbcon)
		 { $this->error('数据库帐号密码错误'); 
	     } 
		 //mysqli_fetch_assoc(result);规定由 mysqli_query()、mysqli_store_result() 或 mysqli_use_result() 返回的结果集标识符。
		 //mysql_query('show tables', $Con ); 也可以省略第二个参数,写成:mysql_query('show tables');
         //但是mysqli不行 mysqli_query( $Con,  'show tables');
		 //mysqli_query(connection,query,resultmode);connection	必需。规定要使用的 MySQL 连接。query	必需,规定查询字符串。
		 //resultmode可选。一个常量。可以是下列值中的任意一个:MYSQLI_USE_RESULT(如果需要检索大量数据,请使用这个)MYSQLI_STORE_RESULT(默认)
		 
		 //if (!isset($_SERVER['HTTP_BAE_LOGID']) && !mysql_fetch_assoc(mysql_query("SELECT `SCHEMA_NAME` FROM `INFORMATION_SCHEMA`.`SCHEMATA` WHERE `SCHEMA_NAME`='{$_POST['mysql_master_name']}' LIMIT 0, 1;")))
		 //{ if (!mysql_query("CREATE DATABASE IF NOT EXISTS `{$_POST['mysql_master_name']}` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"))
	     if (!isset($_SERVER['HTTP_BAE_LOGID']) && !mysqli_fetch_assoc(mysqli_query($dbcon,"SELECT `SCHEMA_NAME` FROM `INFORMATION_SCHEMA`.`SCHEMATA` WHERE `SCHEMA_NAME`='{$_POST['mysql_master_name']}' LIMIT 0, 1;")))
		 { if (!mysqli_query($dbcon,"CREATE DATABASE IF NOT EXISTS `{$_POST['mysql_master_name']}` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"))	 
     	   { $this->error('数据库不存在,尝试创建失败!'); 
	       } 
		 } 
		 $zym_7=F(APP_PATH.'/install/data/mysql.sql'); 
		 if (!$zym_7)
		 { $this->error('读取数据库安装信息失败,请检查程序完整性',0,0); 
	     } 
		 $zym_7=strtr($zym_7,array( '{adminuser}'=>$_SESSION['install']['adminuser'], '{salt}'=>substr(md5(NOW_TIME),0,6), '{adminpwd}'=>md5(md5($_SESSION['install']['adminpwd']).substr(md5(NOW_TIME),0,6)), '{installsitename}'=>$_SESSION['install']['sitename'], '{installsiteurl}'=>$_SESSION['install']['siteurl'], '{mysql_driver}'=>C('mysql_driver'), '{mysql_prefix}'=>C('mysql_prefix'), '{mysql_master_host}'=>C('mysql_master_host'), '{mysql_master_port}'=>C('mysql_master_port'), '{mysql_master_name}'=>C('mysql_master_name'), '{mysql_master_user}'=>C('mysql_master_user'), '{mysql_master_pwd}'=>C('mysql_master_pwd'), )); 
		 $zym_5=new model(); 
		 $zym_6=explode(";\n",$zym_7); 
		 foreach($zym_6 as $zym_7)
		 { $zym_5->execute(trim($zym_7).';'); 
		 } 
		 M('config')->createConfigFile(); 
		 F(CACHE_PATH,null); 
		 F(DATA_PATH,null); 
		 F(DATA_PATH.'/install.lock','PTcms Install Lock File!'); 
		 $this->admin=$_SESSION['install']; 
		 $_SESSION['install']=null; 
	   } 
	   $this->display('success'); 
	} 
vim  /usr/share/wwwphp/ptcms/application/install/controller/index.php
service nginx restart

系统安装成功


安装成功!
您的管理员账户是: admin
您的管理员密码是: admin
参与用户调查, 帮助我们完善产品

您可以将下面两个链接保存到您的收藏夹:

    [点击这里访问您的控制面板](http://localhost/admin.php)
    [点击这里查看您的网站](http://localhost/index.php)

希望您能尽情享用 PT小说聚合程序 带来的乐趣!

2 进入系统后台进行设置
(1)为了方便调试,让主机访问虚拟机地址
ifconfig -a
vmware改为桥连接且复制物理连接

(2)fedora防火墙设置允许非本机访问

systemctl start firewalld.service
firewall-cmd --state
firewall-cmd --get-active-zones
 FedoraWorkstation
  interfaces: ens33

firewall-cmd --permanent --zone=FedoraWorkstation --add-port=80/tcp
firewall-cmd --permanent --zone=FedoraWorkstation --add-service=http
systemctl restart firewalld.service

防火墙基础操作

systemctl stop firewalld.service
systemctl start firewalld.service
systemctl restart  firewalld.service

//查看防火墙状态
firewall-cmd --state
//输出
running

//查看活动区域并附带网络接口
firewall-cmd --get-active-zones
//输出
FedoraWorkstation
  interfaces: enp3s0

//通过网络接口查看对应的区域
firewall-cmd --get-zone-of-interface=enp3s0
//输出
FedoraWorkstation

//通过区域名获得所有网络接口
firewall-cmd --zone=FedoraWorkstation --list-interfaces
//输出
enp3s0

//通过区域名获得此区域的信息
firewall-cmd --zone=FedoraWorkstation --list-all
//输出
FedoraWorkstation (default, active)
  interfaces: enp3s0
  sources:
  services: dhcpv6-client mdns samba-client ssh
  ports: 1025-65535/udp 1025-65535/tcp
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

//查看当前区域活动的services
firewall-cmd --get-service
//输出
amanda-client amanda-k5-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns freeipa-ldap freeipa-ldaps freeipa-replication ftp high-availability http https imaps ipp ipp-client ipsec kadmin kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql privoxy proxy-dhcp puppetmaster radius rpc-bind samba samba-client sane smtp squid ssh synergy telnet tftp tftp-client tor-socks transmission-client vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server

//增加端口到防火墙中
firewall-cmd --zone=FedoraWorkstation --add-port=8080/tcp --permanent
firewall-cmd --zone=FedoraWorkstation --add-port=5060-5061/udp --permanent
//删除
firewall-cmd --zone=FedoraWorkstation --remove-port=8080/tcp
firewall-cmd --zone=FedoraWorkstation --remove-port=5060-5061/udp

//增加服务到防火墙中
firewall-cmd --zone=FedoraWorkstation --add-service=smtp --permanent
//删除
firewall-cmd --zone=FedoraWorkstation --remove-service=smtp

进入管理页面

(3)Warning: count(): Parameter must be an array or an object that implements Countable in /usr/share/wwwphp/ptcms/application/admin/controller/index.php on line 2
php7.2之后

[1]each函数已被废弃
之前版本写法:

<?php
    $array = array();
    each($array);

    // Deprecated:  The each() function is deprecated. This message will be suppressed on further calls

在7.2版本中会提示过时,可以使用foreach替代each方法,也可以自己修改each方法替代:

<?php
    function func_new_each(&$array){
       $res = array();
       $key = key($array);
       if($key !== null){
           next($array); 
           $res[1] = $res['value'] = $array[$key];
           $res[0] = $res['key'] = $key;
       }else{
           $res = false;
       }
       return $res;
    }

[2]当传递一个无效参数时,count()函数将抛出warning警告:
之前版本写法
<?php
count(’’);

    // Warning:  count(): Parameter must be an array or an object that implements Countable
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值