分类 PHP 下的文章



报错信息说的是 sg_load 函数没有找到,查找一番资料后,发现 sg_load 是 SourceGuardian 扩展提供的全局函数,运行环境需要这个扩展才能执行这段代码。SourceGuardian 提供 php 源码文件的加密,而运行这些加密 php 文件则需要安装扩展:SourceGuardian loader。

- 阅读剩余部分 -

原因是网站目录指向的是public
解决办法:
1.cd 到nginx目录下,打开fastcgi.conf
2.vim /usr/local/nginx/conf/fastcgi.conf
3.修改 (yy + p复制行)

fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:/tmp/:/proc/";  

改为

 fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/../:/tmp/:/proc/";

重启ngnix或者lnmp即可
php_basedir.png

第一步:在lnmp1.4找到php安装的版本
lnmp1.4/src
使用命令 tar -jxvf php-7.1.7.tar.bz2 解压

第二步: 在解压的php-7.1.7文件夹里找到fileinfo文件夹,然后使用命令 cd /home/xxx/lnmp1.4/src/php-7.1.7/ext/fileinfo 进入到fileinfo文件夹
在此目录下执行
第三步:/usr/local/php/bin/phpize,得到数据
在此目录下执行
第四步: 使用如下命令编译安装

./configure -with-php-config=/usr/local/php/bin/php-config
make && make install

第五步:再修改/usr/local/php/etc/php.ini 查找:extension = 再最后一个extension= 后面添加上extension = "fileinfo.so" 保存,执行/etc/init.d/php-fpm restart 重启。

nignx运行PHP PHP_SELF为空
设置php.ini
cgi.fix_pathinfo=1
但是 这样会存在漏洞
【漏洞分析】location对请求进行选择的时候会使用URI环境变量进行选择,其中传递到后端Fastcgi的关键变量SCRIPT_FILENAME由nginx生成的$fastcgi_script_name决定,而通过分析可以看到$fastcgi_script_name是直接由URI环境变量控制的,这里就是产生问题的点。而为了较好的支持PATH_INFO的提取,在PHP的配置选项里存在cgi.fix_pathinfo选项,其目的是为了从SCRIPT_FILENAME里取出真正的脚本名。