PHP配置
2.配置error_log
3.配置open_basedir
4.PHP动态扩展模块安装
PHP配置
1 2 3 | # /usr/local/php/bin/php -i |grep -i "loaded configuration file" PHP Warning: // 一行警告 Loaded Configuration File => /usr/local/php/etc/php .ini //PHP 配置文件的位置 |
php.ini为PHP的配置文件/usr/local/php/etc/php.ini,取消上面的警告,编辑php.ini,找到date.timezone:
1 | date .timezone = Asia /Shanghai |
再次执行不在提示警告信息
1.PHP 的 disable_functions
PHP有很多函数,有一些函数(比如exec)会直接调用Linux系统命令,如果开放会非常危险。
基于安全考虑拔一下存在安全风险的函数禁掉:
1 2 3 | # vim /usr/local/php/etc/php.ini //搜索disable_functions disable_functions = eval ,assert,popen,passthru,escapeshellarg,escapeshellcmd,passthru, exec ,system,chroot,scandir, chgrp , chown ,escapeshellcmd,escapeshellarg,shell_exec,proc_get_status,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink, symlink ,leak,popepassthru,stream_socket_server,popen,proc_open,proc_close |
若将来遇到问题记得你曾经禁用了一些函数,这些被禁掉的函数是不能在PHP代码中调用的。更改完php.ini后,由于需要在httpd中调用PHP,所以需要重启htppd服务使其生效。
2.配置error_log
设置错误日志
1 2 3 4 5 6 7 8 9 10 11 12 | # vim /usr/local/php/etc/php.ini // 搜索log_errors,改为 log_errors = On // 搜索error_log error_log = /var/log/php/php/errors .log // 搜索error_reporting,改为 error_reporting =E_ALL & ~E_NOTICE //E_ALL 所有类型的日志(提示和警告)&并且~排除notice // 搜索display_errors,改 display_errors = Off |
额外操作:
1 2 3 | # mkdir /var/log/php # chmod 777 /var/log/php # /usrlocal/php/apache2.4/bin/apachectl gracectl |
测试:
1 2 3 4 5 6 7 8 | # vim /data/wwwroot/www.abc.com/test.php //写入不完整的代码 <?php echo 111 # Curl -A "123" -I -x127.0.0.1:80 www.abc.com/test.php //500 Internal Server Error # cat /var/log/php/php_errors.log ... // 通过日志判断, test .php文件第三行缺少代码 |
3.配置open_basedir
将网站限制在指定的目录里,该站点被黑是不会影响其他站点
服务器只有一个站点,可直接在php.ini中设置open_basedir参数(只能定义一次)
1 2 3 | # vim /usr/local/php/etc/php.ini open_basedir = /tmp : /data/wwwroot/abc .com // 可以写多个目录,用:分隔 |
测试:
1 2 3 4 | # /usr/local/apache2.4/bin/apachectl graceful # cp /usr/local/apache2.4/htdocs/1.php /data/wwwroot/123.com/ # curl -x127.0.0.1:80 -I 123.com/1.php //500 Internal Server error 不能访问 |
多个站点给单个虚拟主机设置open_basedir,对于php.ini里面的配置,在httpd.conf中也是可以设置的:
1 2 3 4 5 6 7 8 9 | # vim /usr/local/apache2.4/conf/extra/httpd-vhost.conf # vim /usr/lcoal/apache2.4/conf/extra/httpd-vhosts.conf <VirtualHost *:80> DocumentRoot "/data/wwwroot/abc.com" ServerName www.abc.com ServerAlias abc.com CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/abc.com-access_%Y%m%d.log 86400" combined php_admin_value open_basedir "/data/wwwroot/abc.com/:/tmp/" < /VirtualHost > |
//php_admin_value可以定义php.ini里面的参数,除此之外像error_log之类的也可以定义。
4.PHP动态扩展模块安装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | # /usr/local/php/bin/php -m //查看模块 安装PHP的redis扩展模块 # cd /usr/local/src # wget https://codeload.github.com/phpredis/phpredis/zip/develop // 若地址失效请到r.aminglinux.com找最新的下载地址 # mv develop phpredis-develop.zip # unzip !$ # cd phpredis-develop/ # /usr/local/php/bin/phpize //目的是生成configure文件 Configuring for : PHP Api Version: 20131106 Zend Module Api No: 20131226 Zend Extension Api No: 220131226 Cannot find zutoconf. Please check your autoconf installation and the $PHP_AUTOCONF environment variable. Then, rerun this script. // 可以看到上面有一个错误cannot find autoconf,这需要安装一些autoconf # yum install -y autoconf # /usr/local/php/bin/phpize //再次执行 # ./configure --with-php-config=/usr/local/php/bin/php-config # make # make install Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20131226/ // make install 的时候会把编译好的redis.so放到这个目录下面,这个目录也是扩展模块存放到目录 # /usr/local/php/bin/php -i |grep extension_dir //查看扩展模块存放目录,我们可以在 //php.ini中自定义该目录 # ls /usr/local/php/lib/php/extensions/no-debug-zts-20131226/ // 可以看到redis.so模 # vim /usr/local/php/etc/php.ini //增加一行配置(可放到最好) extension = redis.so # /usr/local/php/bin/php -m |grep redis //查看是否加载了Redis模块 redis |
配置若有遗漏或错误,请评论留言。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步