Laravel5.6+CentOS7.6+Lnmp1.5+Vue6.9+Node10.15项目开发实录-04重要BUG“No input file specified” 404或502错误码等等解决办法

情景浮现

如题,小编在Laravel5.6+CentOS7.6+Lnmp1.5+Vue6.9+Node10.15项目开发下页面遇到了一个 “No input file specified”错误, 重启php-fpm后又正常,几十分钟后又接着报No input file specified 错误。

原因分析

1、任何对.php文件的请求,都简单地交给php-cgi去处理,但没有验证该php文件是否存在。PHP文件不存在,没办法返回普通的404错误,它返回一个404, 并带上一句”No input file specified”

2、还可能跟路径或者权限有关系,或者SCRIPT_FILENAME 变量没有被正确的设置(这在nginx是最常见的原因, nginx.conf)
a. 如果html也出现404错误,那么就是document root 设置的有问题
b. 检查脚本文件的权限, 可能PHP或者web server不能读取它
c. SCRIPT_FILENAME设置错误

3、防跨目录设置
a、在低版本中的php.ini里面,open_basedir设置;
b、后来为了方便有的修改.user.ini 里面的open_basedir的值来设置限制访问的目录或删除来移除防跨目录的设置。修改后重启php-fpm即可。
c、如果不想用防跨目录或者修改.user.ini的防跨目录的目录还需要将 /usr/local/nginx/conf/fastcgi.conf 里面的fastcgi_param PHP_ADMIN_VALUE “open_basedir=$document_root/:/tmp/:/proc/”; 在该行行前添加 # 或删除改行,需要重启nginx。

解决办法

方法一:(真正的正确方法),产生原因和php-fpm的#防跨目录设置#有关系

server
{
    listen 8082;
    server_name localhost;
    index index.html index.htm index.php;
    root /home/wwwroot/demo/public;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ [^/]\.php(/|$)
    {
        include fastcgi_params;
        fastcgi_pass  unix:/tmp/php-cgi.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

LNMP 1.4或更高版本如果不想用防跨目录或者修改.user.ini的防跨目录的目录还需要将 /usr/local/nginx/conf/fastcgi.conf 里面的fastcgi_param PHP_ADMIN_VALUE “open_basedir=$document_root/:/tmp/:/proc/”; 在该行行前添加 # 或删除改行,需要重启nginx。

LNMP 1.4或更高版本也可以直接使用lnmp安装包 tools/ 目录下的 ./remove_open_basedir_restriction.sh 进行移除。
在Thinkphp、codeigniter、Laravel等框架下,网站目录一般是在public下,但是public下的程序要跨目录调用public上级目录下的文件,因为LNMP默认是不允许跨目录访问的,所以都是必须要将防跨目录访问的设置去掉,有时候这些框架类的程序提示500错误也可能是这个问题引起的。

方法二:(不安全,不可取)打开文件: usr/local/php/etc/php.ini,修改以下配置

  • 把cgi.fix_pathinfo=0 改为 cgi.fix_pathinfo=1
  • 把 ;cgi.force_redirect=1 改为 cgi.force_redirect=0

方法三:(不是主要原因)修改文件权限

cd /home/wwwroot/
chown -R www:www ./*
chmod -R 755 ./*
lnmp restart

当执行的时候。如果个别项目里边有.user.ini文件。会提示

chown: changing ownership of ‘./www.test.com/.user.ini’: Operation not permitted

这时候需要进入这个目录执行

chattr -i .user.ini

然后进入到wwwroot目录, 再执行权限命令,最后别忘了,进入www.test.com目录,执行

chattr +i .user.ini

最后重启

lnmp restart

搞定!

补充:Linux chattr 命令,用于改变文件属性。
这项指令可改变存放在ext2文件系统上的文件或目录属性,这些属性共有以下8种模式:

  1. a:让文件或目录仅供附加用途。
  2. b:不更新文件或目录的最后存取时间。
  3. c:将文件或目录压缩后存放。
  4. d:将文件或目录排除在倾倒操作之外。
  5. i:不得任意更动文件或目录。
  6. s:保密性删除文件或目录。
  7. S:即时更新文件或目录。
  8. u:预防以外删除。

语法

chattr [-RV][-v<版本编号>][+/-/=<属性>][文件或目录...]

参数

  • -R 递归处理,将指定目录下的所有文件及子目录一并处理。
  •   -v<版本编号> 设置文件或目录版本。
  •   -V 显示指令执行过程。
  •   +<属性> 开启文件或目录的该项属性。
  •   -<属性> 关闭文件或目录的该项属性。
  •   =<属性> 指定文件或目录的该项属性。

实例

用chattr命令防止系统中某个关键文件被修改:

chattr +i /etc/resolv.conf
lsattr /etc/resolv.conf

会显示如下属性

----i-------- /etc/resolv.conf

让某个文件只能往里面追加数据,但不能删除,适用于各种日志文件:

chattr +a /var/log/messages

2020年3月18日迁移服务器到阿里云ECS遇到的问题及其解决方法

问题一:提示如下错误:

require(): Failed opening required ‘/home/www/project/public/../vendor/autoload.php’ (include_path=’.:/usr/local/php/lib/php

解决方法:

1. cd 到该引用的根目录,先删除 composer.lock 文件;
2. 重新在根目录执行“composer install”,这样就能重新生成 composer.lock 文件了。
3.如果出现php版本不匹配,可用“composer install –ignore-platform-reqs”(忽略版本匹配)。
4. vim /usr/local/nginx/conf/fastcgi.conf, 注释掉如下一行:
# fastcgi_param PHP_ADMIN_VALUE “open_basedir=$document_root/:/tmp/:/proc/”;
然后重启 lnmp restart

问题二:提示如下错误:

404 Not Found Nginx

解决方法:

这个问题是和小编的nginx配置有关系,主要原因是我们自己定义的8081端口没有在阿里云的安全组里加上安全策略导致的。加上后,重启下nginx服务器即可

2020年4月29日部署新功能模块遇到的问题及其解决方法

问题一:运行命令“php artisan migrate”提示如下错误:

PHP Warning:  include(/home/www/mysite/vendor/composer/../symfony/contracts/Service/ResetInterface.php): failed to open stream: No such file or directory in /home/www/mysite/vendor/composer/ClassLoader.php on line 444

Warning: include(/home/www/mysite/vendor/composer/../symfony/contracts/Service/ResetInterface.php): failed to open stream: No such file or directory in /home/www/mysite/vendor/composer/ClassLoader.php on line 444
PHP Warning:  include(): Failed opening '/home/www/mysite/vendor/composer/../symfony/contracts/Service/ResetInterface.php' for inclusion (include_path='.:/usr/local/php/lib/php') in /home/www/mysite/vendor/composer/ClassLoader.php on line 444

Warning: include(): Failed opening '/home/www/mysite/vendor/composer/../symfony/contracts/Service/ResetInterface.php' for inclusion (include_path='.:/usr/local/php/lib/php') in /home/www/mysite/vendor/composer/ClassLoader.php on line 444
PHP Fatal error:  Interface 'Symfony\Contracts\Service\ResetInterface' not found in /home/www/mysite/vendor/symfony/console/Formatter/OutputFormatterStyleStack.php on line 20

Fatal error: Interface 'Symfony\Contracts\Service\ResetInterface' not found in /home/www/mysite/vendor/symfony/console/Formatter/OutputFormatterStyleStack.php on line 20

解决方法:

运行“php artisan migrate”先运行“composer dump-autoload”

郑重声明:

1 本资源来源于互联网,资源的版权归资源原作者所持有,受《中华人民共和国著作权法》等相关法律保护。

2 由于无法和原作者取得联系,所以上传的部分资源无法先通过原作者的同意就分享给大家了,如本资源侵犯了您(原作者)的权益,请联系我们(微信号 xiaohaimei1989),我们会立马删除您的资源,并向您表达诚挚的歉意!

3 本站是一个公益型网站,分享资源的目的在于传播知识,分享知识,收取一点点打赏的辛苦费是用于网站的日常运营开支,并非用于商业用途。

4 本站资源只提供学习和参考研究使用,使用过后请在第一时间内删除。本站不承担资源被单位或个人商用带来的法律责任。

发表评论