php7.2.10+mysql+Ptcms源码调试

1更改权限
Fedora的文件夹权限更改

su root
ls -l
groups //查看当前登录用户的组内成员
groups gumu wheel  //查看gliethttp用户所在的组,以及组内成员
whoami //查看当前登录用户名

useradd fuyun
passwd fuyun

vim /etc/sudoers

修改 /etc/sudoers 文件,找到下面一行,把前面的注释(#)去掉

## Allows people in group wheel to run all commands
%wheel    ALL=(ALL)    ALL
#然后修改用户,使其属于root组(wheel),命令如下:
#usermod -g root fuyun
#修改完毕,现在可以用fuyun帐号登录,然后用命令 su - ,即可获得root权限进行操作。
fuyun   ALL=(ALL)     ALL

2VM共享文件夹
安装VMware tools
在虚拟机菜单中选择虚拟机——安装VMware Tools
然后打开文件管理器,会发现多了个VMware Tools,打开
解压VMware Tools.tar.gz,随便解压到一个地方,然后用在终端切换到解压后的目录,然后输入./vmware-install.pl即可

mkdir /mnt/cdrom
cd  /mnt/cdrom
cp VMwareTools-10.2.5-8068393.tar.gz /usr/
cd /usr/
tar xvfz VMwareTools-10.2.5-8068393.tar.gz
vmware-tools-distrib/vmware-install.pl

vmware-hgfsclient //列出共享文件夹
vmhgfs-fuse /mnt/cdrom/   //即可将共享文件夹挂载到/mnt/cdrom下面
cp -r /mnt/cdrom/soft/php/ /usr/share/   //把共享文件夹拷入目标文件夹

3 设置虚拟目录

vim  /etc/nginx/nginx.conf


location /www {
         alias /usr/share/php/wwwphp/;       #后面的"/"符号一定要带上
        }
systemctl restart nginx.service

sudo -s mv /usr/share/php/wwwphp/ usr/share/

:w !sudo tee % //vim 强制保存退出

chmod 777 ptcms

4 不认PHP文件

dnf install php-fpm
service php-fpm start #启动php-fpm
vim  /etc/nginx/nginx.conf

include /etc/nginx/default.d/*.conf;  #如果上面包含这个文件则打开这个文件

vim  /etc/nginx/default.d/php.conf
# pass the PHP scripts to FastCGI server
#
# See conf.d/php-fpm.conf for socket configuration
#
index index.php index.html index.htm;

location ~ \.(php|phar)(/.*)?$ {
    fastcgi_split_path_info ^(.+\.(?:php|phar))(/.*)$;

    fastcgi_intercept_errors on;
    fastcgi_index  index.php;
    include        fastcgi_params;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    fastcgi_param  PATH_INFO $fastcgi_path_info;
    fastcgi_pass   php-fpm;
}

改为

vim  /etc/nginx/default.d/w.conf


# wwwphp

location /w {
         alias /usr/share/wwwphp/ptcms/;      
        }

location /ptcms/ {
     root /usr/share/wwwphp;
     index index.php index.html;

     location ~ ^/ptcms/(.+\.php)$
     {
         try_files $uri =404;
         fastcgi_intercept_errors on;
         include        fastcgi_params;
         fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
         fastcgi_pass   php-fpm;
     }
}



# ptcms 

location /ptcms {
         alias /usr/share/wwwphp/ptcms/;
        }

location /ptcms/ {
     root /usr/share/wwwphp;
     index index.php index.html;

     location ~ ^/ptcms/(.+\.php)$
     {
         try_files $uri =404;
         fastcgi_intercept_errors on;
         include        fastcgi_params;
         fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
         fastcgi_pass   php-fpm;
     }
}

Nginx配置中指令root和alias的区别浅析
重启

service nginx restart

service php-fpm restart

报错

See "systemctl status nginx.service" and "journalctl -xe" for details

//按照提示,执行此命令,查看错误原因
 systemctl status nginx.service

nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor prese>
  Drop-In: /usr/lib/systemd/system/nginx.service.d
           └─php-fpm.conf
   Active: failed (Result: exit-code) since Fri 2018-09-21 21:07:09 CST; 1min 5>
  Process: 891 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
  Process: 2960 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=1/FAILURE)
  Process: 2959 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status>
 Main PID: 902 (code=exited, status=0/SUCCESS)

9月 21 21:07:09 bogon systemd[1]: Starting The nginx HTTP and reverse proxy ser>
9月 21 21:07:09 bogon nginx[2960]: nginx: [warn] could not build optimal types_>
9月 21 21:07:09 bogon nginx[2960]: nginx: [emerg] duplicate location "/w" in /e>
9月 21 21:07:09 bogon nginx[2960]: nginx: configuration file /etc/nginx/nginx.c>
9月 21 21:07:09 bogon systemd[1]: nginx.service: Control process exited, code=e>
9月 21 21:07:09 bogon systemd[1]: nginx.service: Failed with result 'exit-code'.
9月 21 21:07:09 bogon systemd[1]: Failed to start The nginx HTTP and reverse pr


//查看错误的详情
systemctl status nginx.service -l

netstat -ntlp | grep 80
rm -rf /etc/nginx/default.d/w.conf

去掉
location /ptcms {
alias /usr/share/wwwphp/ptcms/;
}

5 可以访问http://127.0.0.1/ptcms/index.php
(1)报错
请检查目录权限[/usr/share/wwwphp/ptcms/runtime]
ptcms.conf

if (!-e $request_filename) { rewrite ^/(.*) /index.php?s=$1 last;}

chmod 777 /usr/share/wwwphp/ptcms/runtime

目录设置权限为777,也是不可写,还是报错,解决如下:
在fedora下存在这种问题是由于fedora下默认安装了 Selinux的原因。
a.在安装Fedora时选择开启或者关闭SeLinux。当然相信大多数来到这里的不会是为了这种方法来到这里。

b.临时关闭SELinux。如果你仅仅只是想临时关闭,可以输入
setenforce 0

c.禁用SELinux。在 /etc 下可以看到一个SELinux文件夹,进入后,里面有个config文件,在终端进入到文件夹,输入
cd /etc/selinux/
vi config
更改其中的SELINUX项的值就可以关闭和启用SELinux服务了。
修改成 SELINUX=disable 禁用SeLinux
修改成 SELINUX=enforcing 使用SeLinux
(2)继续报错 ptcms/install/index/index.html 找不到该文件
伪静态问题
安装memcached

dnf clean packages
dnf install memcached

vim  /etc/sysconfig/memcached

PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="512"
OPTIONS=""

systemctl start memcached.service
systemctl enable memcached.service


echo stats | nc localhost 11211

安装Memcached PHP

dnf install php php-pecl-memcache
dnf install php php-pecl-memcached

systemctl restart httpd.service

6奇怪的问题
为什么根目录可以出现安装页面,而设置的ptcms目录还是报错;
访问http://127.0.0.1/ptcms/index.php 还是跳转到
http://127.0.0.1/ptcms/install/index/index.html,报错

404页面未找到

很抱歉!这个页面已经找不到了.

你可以返回首页 {$siteurl}

访问http://127.0.0.1/index.php 正常出现安装步骤。

问题应该出现在虚拟目录的设置上

vim  /etc/nginx/nginx.conf //去掉ptcms虚拟目录

 # location /ptcms {
        # alias /usr/share/wwwphp/ptcms/;       #后面的"/"符号一定要带上
       # }

错误依然存在

vim  /etc/nginx/default.d/ptcms.conf

# ptcms 

#location /ptcms {
 #        alias /usr/share/wwwphp/ptcms/;
  #      }

location /ptcms/ {
     root /usr/share/wwwphp;
     index index.php index.html;

     location ~ ^/ptcms/(.+\.php)$
     {
         try_files $uri =404;
         fastcgi_intercept_errors on;
         include        fastcgi_params;
         fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
         fastcgi_pass   php-fpm;
     }
         if (!-e $request_filename) {
               rewrite ^/(.*)  /index.php?s=$1 last;
         }
    # }
}

#if (!-e $request_filename) { rewrite ^/(.*) /index.php?s=$1 last;}

删除

rm -rf  /etc/nginx/default.d/ptcms.conf

虚拟ptcms目录失效

哈哈。原来这里以前有设置

  #  root         /usr/share/nginx/html;#站点目录
        root  /usr/share/wwwphp/ptcms;

7 根目录安装http://127.0.0.1/index.php
Mysql数据库配置http://127.0.0.1/install/index/setting.html,报错。直接跳转到http://127.0.0.1/install/index/success.html 404错误,没找到

开启调试模式:
修改根目录index.php文件

vim  /usr/share/wwwphp/ptcms/index.php

define('APP_DEBUG',true);

vim /usr/share/wwwphp/ptcms/ptcms/core/pt.php
vim /usr/share/wwwphp/ptcms/ptcms/core/response.php

报错如下:

Call to undefined function mysql_connect()

vim  /usr/share/wwwphp/ptcms/test.php
<?php
mysql_connect ('localhost', 'root', 'password');
?>


$db_host='127.0.0.1';
$db_user='root';
$db_psw='123456';
$db_name='test';
$db_charset='utf8';
// 2. 获取要查询打用户名(通过地址栏传递参数)
$username=isset($_GET['username'])?$_GET['username']:'';
if (empty($username)){
    echo '用户名不能为空.';
}

// 3. 连接数据库
$conn=@mysqli_connect($db_host,$db_user,$db_psw) or die('数据库连接失败.'.mysqli_error());
var_dump($conn);

最后发现mysqli这个东西,突然想起,php改版了,命令也变了
改mysql_connect 为 mysqli_connect
@mysqli_connect这个加个@是错误抑制符,是忽略当前行所有报错,一般不要这样用,一般要用异常捕获try。

vim /usr/share/wwwphp/ptcms/application/install/controller/index.php

if (!@mysqli_connect($_POST['mysql_master_host'].':'.$_POST['mysql_master_port'],$_POST['mysql_master_user'],$_POST['mysql_master_pwd'])){ $this->error('数据库帐号密码错误'); }

D:\soft\php\wwwphp\ptcms\public\plugin\codemirror\php.js 也有mysql_connect 未改

执行下一步报错,
mysqli_connect不带第四个指定数据库参数报错

//$connection = mysqli_connect('localhost', 'root', '(QAZ123wsx*)','webdb');//ok
$connection = mysqli_connect('localhost', 'root', '(QAZ123wsx*)');//报错MySQL server has gone away

if (mysqli_connect_errno($connection))
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$connection->close();

原先版本的mysql.api在php5.5开始被移除,php5.5之后自带的是mysqli,但仅支持部分部分函数。如果需要使用mysql_connect();需要单独安装mysql,如果不想安装mysql,只能使用mysqli_connect();mysqli_connect(“localhost”,“my_user”,“my_password”,“my_db”);

git clone https://github.com/php/pecl-database-mysql mysql --recursive//1:获取PHP MySQL扩展源码
cd mysql //2:编译   cd到mysql目录,运行phpize(如果没有安装phpize请先安装)
phpize
./configure --with-php-config=/usr/local/php/bin/php-config
如果不知道php-config目录,先运行which php-config

dnf install php-devel
/usr/bin/phpize
whereis php//  用/usr/bin/php-config替换面

./configure --with-php-config=/usr/bin/php-config

注释:
–with-php-config为已安装的php的php-config文件完整路径
如果新增的扩张需要有其他的依赖,则可以增加–with-extention 参数
–with-extention为现在需要补充的php扩展项,如果该配置项需要赋值,而你系统的对应库不在默认路径,则需要指定路径,如果在默认路径,则不需要指定。
如安装mysqli扩张,需要添加相关依赖
./configure –with-php-config=/usr/local/php5/bin/php-config –with-mysqli=/usr/local/mysql/bin/mysql_config

make && make install //3:安装
checking .....
Installing shared extensions:     /usr/lib64/php/modules/    //安装完成后请留意安装目录

PHP Warning: PHP Startup: Unable to load dynamic library ‘mysql.so’ (tried: /home/gumu/mysql/modules/mysql.so (/home/gumu/mysql/modules/mysql.so: undefined symbol: mysqlnd_get_client_info), /home/gumu/mysql/modules/mysql.so.so (/home/gumu/mysql/modules/mysql.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library ‘mysql.so’ (tried: /home/gumu/mysql/modules/mysql.so (/home/gumu/mysql/modules/mysql.so: undefined symbol: mysqlnd_get_client_info), /home/gumu/mysql/modules/mysql.so.so (/home/gumu/mysql/modules/mysql.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0

vim /etc/php.ini  //4:修改php.ini配置文件  如果不不知道php.ini 目录,先使用 phpinfo(); 查看,在最后增加extension=mysql.so  (vi中使用:$)跳转到文件最后
service php-fpm restart //5:重启php-fpm 再通过phpinfo();查看就有了mysql的模块

extension_dir = “/usr/lib64/php/modules/”

service nginx start
service nginx stop
service nginx restart
service nginx reload
  
/etc/init.d/nginx start
/etc/init.d/nginx stop
/etc/init.d/nginx restart
/etc/init.d/nginx reload
service php-fpm start
service php-fpm stop
service php-fpm restart
service php-fpm reload
  
/etc/init.d/php-fpm start
/etc/init.d/php-fpm stop
/etc/init.d/php-fpm restart
/etc/init.d/php-fpm reload

删除

rm -rf /usr/lib64/php/modules/mysql.so
rm -rf /home/gumu/mysql/modules/mysql.so
wget http://down.xxorg.com/PHP/mysql.so

把mysql.so删除后php -m
重新下载还是报错
PHP 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_connection_connect), /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

发现php.ini内没有类似 extension=mysql.so设置,而是多了php.d,php.d由多个扩展的ini组成,

/etc/php.d/10-opcache.ini, /etc/php.d/20-bcmath.ini, /etc/php.d/20-bz2.ini, /etc/php.d/20-calendar.ini, /etc/php.d/20-ctype.ini, /etc/php.d/20-curl.ini, /etc/php.d/20-dom.ini, /etc/php.d/20-exif.ini, /etc/php.d/20-fileinfo.ini, /etc/php.d/20-ftp.ini, /etc/php.d/20-gd.ini, /etc/php.d/20-gettext.ini, /etc/php.d/20-gmp.ini, /etc/php.d/20-iconv.ini, /etc/php.d/20-intl.ini, /etc/php.d/20-json.ini, /etc/php.d/20-mbstring.ini, /etc/php.d/20-mysqlnd.ini, /etc/php.d/20-pdo.ini, /etc/php.d/20-phar.ini, /etc/php.d/20-posix.ini, /etc/php.d/20-recode.ini, /etc/php.d/20-shmop.ini, /etc/php.d/20-simplexml.ini, /etc/php.d/20-sockets.ini, /etc/php.d/20-sqlite3.ini, /etc/php.d/20-sysvmsg.ini, /etc/php.d/20-sysvsem.ini, /etc/php.d/20-sysvshm.ini, /etc/php.d/20-tidy.ini, /etc/php.d/20-tokenizer.ini, /etc/php.d/20-xml.ini, /etc/php.d/20-xmlwriter.ini, /etc/php.d/20-xsl.ini, /etc/php.d/30-mysqli.ini, /etc/php.d/30-pdo_mysql.ini, /etc/php.d/30-pdo_sqlite.ini, /etc/php.d/30-wddx.ini, /etc/php.d/30-xmlreader.ini, /etc/php.d/40-igbinary.ini, /etc/php.d/40-memcache.ini, /etc/php.d/40-msgpack.ini, /etc/php.d/40-zip.ini, /etc/php.d/50-memcached.ini 


vim /etc/php.d/20-ftp.ini
; Enable ftp extension module
extension=ftp

vim  /etc/php.d/20-mysqlnd.ini
; Enable mysqlnd extension module
extension=mysqlnd

去掉/etc/php.ini中extension=mysql.so
新建

vim  /etc/php.d/20-mysql.ini
 ; Enable mysqlnd extension module
    extension=mysql

继续报错PHP Warning: PHP Startup: Unable to load dynamic library ‘mysql’ (tried: /usr/lib64/php/modules/mysql (/usr/lib64/php/modules/mysql: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/mysql.so (/usr/lib64/php/modules/mysql.so: undefined symbol: mysqlnd_connection_connect)) in Unknown on line 0

 rm -rf /etc/php.d/20-mysql.ini
vim  /etc/php.d/30-mysql.ini
     ; Enable mysqlnd extension module
        extension=mysql

PHP Warning: PHP Startup: mysql: Unable to initialize module
Module compiled with module API=20160303
PHP compiled with module API=20170718
These options need to match
in Unknown on line 0

mv /etc/php.d/30-mysql.ini /etc/php.d/40-mysql.ini

还是不行。不论自己编译还是下载mysql.so,都是报错!也许php不再支持这种扩展。

rm -rf /usr/lib64/php/modules/mysql.so
rm -rf /home/gumu/mysql/

cp mysql-647c933.tar.gz /home/gumu/
cd /home/gumu/
tar xvfz mysql-647c933.tar.gz
cd mysql-647c933
phpize


./configure --with-php-config=/usr/bin/php-config
configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.

解决方法

wget https://sourceforge.net/projects/re2c/files/0.16/re2c-0.16.tar.gz
tar zxf re2c-0.16.tar.gz && cd re2c-0.16
./configure
make && make install

make && make install

/home/gumu/mysql-647c933/php_mysql.c: 在函数‘zif_mysql_fetch_lengths’中:
/home/gumu/mysql-647c933/php_mysql.c:2399:14: 警告:assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  if ((lengths=mysql_fetch_lengths(mysql_result))==NULL) {

还是那个报错
PHP Warning: PHP Startup: Unable to load dynamic library ‘mysql.so’ (tried: /home/gumu/mysql-647c933/modules/mysql.so (/home/gumu/mysql-647c933/modules/mysql.so: undefined symbol: mysqlnd_get_client_info), /home/gumu/mysql-647c933/modules/mysql.so.so (/home/gumu/mysql-647c933/modules/mysql.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library ‘mysql.so’ (tried: /home/gumu/mysql-647c933/modules/mysql.so (/home/gumu/mysql-647c933/modules/mysql.so: undefined symbol: mysqlnd_get_client_info), /home/gumu/mysql-647c933/modules/mysql.so.so (/home/gumu/mysql-647c933/modules/mysql.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0

=====================================================================
PHP : /usr/bin/php
Warning: PHP Startup: Unable to load dynamic library ‘mysql.so’ (tried: /home/gumu/mysql-647c933/modules/mysql.so (/home/gumu/mysql-647c933/modules/mysql.so: undefined symbol: mysqlnd_get_client_info), /home/gumu/mysql-647c933/modules/mysql.so.so (/home/gumu/mysql-647c933/modules/mysql.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0

PHP_SAPI : cli
PHP_VERSION : 7.2.10
ZEND_VERSION: 3.2.0
PHP_OS : Linux - Linux bogon 4.16.3-301.fc28.x86_64 #1 SMP Mon Apr 23 21:59:58 UTC 2018 x86_64
INI actual : /home/gumu/mysql-647c933/tmp-php.ini
More .INIs :
CWD : /home/gumu/mysql-647c933
Extra dirs :
VALGRIND : Not used

删除重现

 cd ..
    rm -rf mysql-647c933
     tar xvfz mysql-647c933.tar.gz
        cd mysql-647c933
        phpize
        ./configure --with-php-config=/usr/bin/php-config

 rm -rf /usr/lib64/php/modules/mysql.so
   make && make install

继续失败,下面就是看是否可以安装低版本PHP

./configure --with-php-config=/opt/php/bin/php-config --with-mysql=mysqlnd

猜你喜欢

转载自blog.csdn.net/gumufuyun/article/details/82796389