遇到一个奇怪到无法定义的问题
昨晚拿了一台空服务器,里面什么都没有,用wget -c http://soft.vpser.net/lnmp/lnmp1.4.tar.gz && tar zxf lnmp1.4.tar.gz && cd lnmp1.4 && ./install.sh lnmp安装lnmp,很顺利,安装成功,可以访问默认的安装成功的页面。而当我把做好的laravel项目上传至服务器并做好配置的时候,问题出现了。浏览器访问一片空白,F12检测报500错误。经过断点测试,发现一个让我十分纳闷的问题:在入口文件的第一行require就挂掉了。我把require包含的路径变来变去,只要有 “..”就不成功。
我把上面遇到的问题从项目中抽出来,做了一个超级简单当我demo。如下:
1、创建目录与文件,结构如下:
test
|—a
|—a.php
|—b
|—b.php
|—c
|—c.php
|—home
|—index.php
2、各个文件的内容
a/a.php
<?php
echo"this is a.php <br/>\n";
echo "a.php require b.php <br/>\n";
require __DIR__ . "/../b/b.php";
echo "<br/>\n";
echo "a.php require c.php <br/>\n";
require __DIR__ . "/../c/c.php";
echo "<br/>\n";
b/b.php
<?php
echo'this is b.php';
c/c.php
<?php
echo'this is c.php';
home/index.php
<?php
echo "this is index <br/><br/>\n\n";
echo "now require a.php <br/>";
require __DIR__ . "/../a/a.php";
echo "<br/>\n";
echo "now require b.php <br/>\n";
require "../b/b.php";
echo "<br/><br/>\n\n";
echo "now require c.php <br/>";
require "../c/c.php";
echo "<br/>\n";
3、配置路径
修改nginx配置文件 Nginx.conf,把配置项server中默认的 ‘root/home/wwwroot/default 改成 ‘root/home/wwwroot/test/home’
4、浏览器页面访问,得到的结果是:
this is index
now require a.php
而在我本地访问的结果是:
this is index
now require a.php
this is a.php
a.php require b.php
this is b.php
a.php require c.php
this is c.php
now require b.php
this is b.php
now require c.php
this is c.php
也就是说,在遇到第一个 require __DIR__ . "/../a/a.php"; 的时候就出错了。
5、在服务器中,执行php命令等到与本地访问相同的结果
xshell>php /home/wwwroot/test/home/index.php
//---------------------------
综上,本地测试和linux中用命令行php执行文件都可以得到预想的结果, 但用浏览器访问服务器时require就出错。
这个问题我思考许久,觉得跟环境有关,但具体又不知道是哪里的配置导致的。
如有人知道,望指点一二
[ 本帖最后由 php_obj 于 2017-9-5 15:13 编辑 ] 按常见问题移除防跨目录设置
回复 2# 的帖子
顺利解决谢谢军哥
页:
[1]