docker搭建的web服务器与php的file_exists函数

        最近把之前的一台服务器改造成为了docker搭建WEB服务器(Nginx+PHP+MYSQL),具体过程就不说了,反正搭建起来后,配置好后,网站还是跑的起来。但是郁闷的事情很快就发生了,一个wordpress的网站用了Timthumb.php来处理网站上的缩略图显示,但是打开网站,一堆400的状态。看了下,是缩略图出不来。因为知道是Timthumb.php来处理缩略图的,所以就单独来看Timthumb.php文件吧。F12网页,打开一个用这个文件处理的缩略图链接,有如下的错误提示:

Server path does not exist. Ensure variable \$_SERVER['DOCUMENT_ROOT'] is set correctly

Could not find the internal image you specified.

        这就郁闷了,百度,GG查了半天也没查出个所以然来,仿佛都相关,但是又完全没用,解决不了问题。然后自己测吧,慢慢调试,最后锁定问题在file_exists函数(或者is_dir函数)上。但是明明存在的图片为什么就不存在呢?看了$_SERVER['DOCUMENT_ROOT']的输出,感觉也是对的,是挂接的nginx的web目录+域名目录,但是就是提示不存在。最后反正也没办法,就在根目录下创建了测试文件来测试,这下肯定是存在的吧。测试相对路径是存在的,但是一旦换到nginx的绝对路径就说不存在了。怀疑是docker的问题,把那路径换成宿主机的也是不存在的,其实知道这样不存在是对的,这也是有点崩溃的无奈测试。最后在绝望间突然想起,不是还有个函数$_SERVER['SCRIPT_FILENAME']可以显示文件的绝对路径么,对,输出来看看。

        当输出来后,所有的疑惑都解开了,这不是挂接的php的docker到宿主机web的地址么?难道,我一直以为的$_SERVER['DOCUMENT_ROOT']欺骗了我。于是重新设置$_SERVER['DOCUMENT_ROOT']为挂接的php的docker到宿主机web的地址再加上网站目录的相对地址,再一次测试,这次总算file_exists返回为真了。

        于是在Timthumb.php的开头,重新赋值了$_SERVER['DOCUMENT_ROOT'],问题解决。如果是Wordpress,还有一个地方需要修改(当然,刚好是因为你装WP的百度编辑器),文件位置在wp-content/plugins/UEditor-KityFormula/ueditor/php/Uploader.class.php,在文件的最上面加上$_SERVER['DOCUMENT_ROOT'] =挂接的php的docker到宿主机web的地址再加上网站目录的相对地址,否则在用百度编辑器上传图片的时候会提示“创建目录失败”,然后F12的时候会看到“TypeError: Cannot read property 'parentNode' of undefined”这样的JS错误,其实最根本的原因就是$_SERVER['DOCUMENT_ROOT']值的设置。设置的原因还是因为docker的缘故。

        前后折腾两天,写此出坑记以作纪念。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值