使用宝塔建站也有很长一段时间了,一般情况都很正常,偶尔也会出现一些莫名其妙的问题,都能快速解决。
但是今天建站的时候却遇到了一个很奇怪的问题:先是出现"no input file specified"错误,后来出现500错误。百度、搜狗搜索之后,发现很多人都遇到过相似的问题,一堆专家在下面回答,却几乎没有可用的解决方案,提出的问题也没有得到最终的解决。
后来经过对各种线索和日志的分析,已经解决了这个问题,这里整理出来。也许这是全网唯一的可用方案,不是说技术独此一家,别人都不会,我还没有这么高傲自大;而是也许有人会,但不愿或懒得做这种编写文档的事情,那么现在遇到这种问题的人,真是只能绕弯想其他办法了。
此文编写+实验环境重建,费时2小时,如果你有缘看到,并且觉得有用,希望花一秒钟时间在下面点个赞再走吧!

一、问题模拟

因为问题已经解决,那么只能重新试图还原问题的现场。于是从头做了一次,把详细的过程写下来,为大家避坑。

  1. 首先登录到宝塔系统中。我的系统是基于Centos7下安装的宝塔,Windows版本可能有稍许不同。如果大家都用过宝塔,这里就不再啰嗦登录过程了,如果有问题可以私信。
  2. 建一个网站,这里用http://test.xxx.com来表示。这里没有放我自己的域名,就用http://xxx.com来表示一级域名吧,加了一个二级域名test。在输入域名时,会自动在www/wwwroot/下建立这个网站的根目录(与域名同名) 。下文中如果出现一级域名被打码,都是指http://xxx.com

    1、进入域名管理,把这个test解析到服务器的IP地址。

    2、进入服务器管理,把http://test.xxx.com添加进白名单。

    请注意,第3,4两步不在同一界面!

    因为每个ISP界面可能不一样,此处就不截图了。如果有问题,同样可以私信询问!

    3、此时,刚刚添加的网站已经可以通过二级域名访问了。

    4、下面上传网站文件到根目录,删除创建网站时自动生成的index.html和404.html,因为我们有了自己的入口文件index.php。

    5、尝试打开网站http://test.xxx.com,果然再次出现了错误提示

    二、查错过程

    此时,我要说两个重要的东西:.user.ini 和 .htaccess ,这两个文件也是在创建网站时自动生成的。
    .htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置;.user.ini则指定了PHP中的basedir,个人理解就是网站的运行目录。

    这两个文件不能删

    “No input file specified.”意思即没有指定输入文件。接下来排错。

    1、首先想到的是没有运行index.php,于是把文件中内容修改为只显示一行文本,果然刷新后依然没有显示,说明确实没有运行index.php,也就是说可能问题出在Apache、php或网站的配置上。

    2、排除了PHP版本的问题

    3、打开宝塔中此网站设置,这里主要看了伪静态和配置文件两个板块。创建网站后伪静态里面其实是空白的,没有什么设置;而配置文件中看起来也没有什么 问题。

其实在解决问题的过程中还是乱填了一些东西,因为都是从网上搜索出来的,所以都没有成功,最后还是恢复成了默认的样子。

4、在设置里面没有实质性的突破后,回到服务器上查找问题。/www/下找到wwwlogs文件夹,必定是保存的运行日志,大概可以从这里去找找问题

 

5、ls下来,可以看到里面是所有已建网站的运行日志和错误日志。

6、找到不能打开的网站的错误日志,more一下。发现里面讲到“is not within the allowed path(s):”这个目录不在允许的路径中。

 

三、解决方案

日志中提到这个目录不在允许的路径中。其实很说明问题。
为什么不被允许?允许的路径是哪里?是否加入到允许的路径就可以被访问?
带着这个问题进行思考,我们通常会发现,出现问题时走了很多弯路,而在通过对各种线索的分析后,真相会逐渐浮出水面。
既然错误提示我们权限的问题,那么就从权限上去找答案。
宝塔里面所建立的网站,是可以被访问的,这在建站完成时证明是成功的,说明宝塔系统没有问题。
then?
Apache管理WEB服务器的环境,也是没有问题。
PHP56管理PHP环境,这就是经过推理后的症结所在。
这里讲的当然是宝塔里面的PHP56。
我们知道PHP的配置文件是php.ini,可是宝塔里的PHP配置文件在哪里呢?

 

 进入到PHP的配置界面

 

按ctrl+f,打开窗口搜索界面,搜索什么内容呢?
从前面错误日志的分析来看,新网站的目录没有加进open_basedir,也就是说其他能访问的网站都在这个文件夹里!
所以搜索open_basedir,或者/www/wwwroot/,也就是www的根目录。结果非常理想,很快就得到我想寻找的内容 。 

 

果然在open_basedir下没有新建网站的目录。注意一下“open_basedir=”后面的路径是用 : 来分隔,所以在最后加上":/www/wwwroot/http://test.xxx.com"这个路径,重启PHP,再次测试,正常打开网站。

至此,这个问题完美解决。
可能解决的方法非常简单,但在处理的过程中,其实经历了很多曲折。

码字不易,如果你有缘看到,并且觉得有用,希望花一秒钟时间在下面点个赞再走吧!

 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐