都2022了,再写PHP的文章是不是过时了?现在还坚持搞PHP的不多了吧。

今天按照官方文档安装完Nginx和PHP之后,打开本地localhost,出现了这个错误:No input file specified.

一. 安装 Nginx

系统是Ubuntu-20.04.1,Nginx是通过官方文档 apt 方式安装的,参考官方wiki:Install | NGINX,

Ubuntu系统默认的apt源里是有Nginx的,不过版本不是最新的1.20,而是1.18.按照Nginx官方文档的教程安装最新版本,首先添加Nginx的源,在/etc/apt/sources.list里添加以下代码,或者新建一个/etc/apt/sources.list.d/nginx.list文件添加以下代码

## Replace $release with your corresponding Ubuntu release.
deb https://nginx.org/packages/ubuntu/ $release nginx
#deb-src https://nginx.org/packages/ubuntu/ $release nginx

将代码中的 $release 换成Ubuntu系统版本的代号,比如20.04的代号是 focal,替换后为

deb https://nginx.org/packages/ubuntu/ focal nginx
#deb-src https://nginx.org/packages/ubuntu/ focal nginx

然后执行

sudo apt update

更新 apt 包信息,如果出现以下错误

W: GPG error: https://nginx.org/packages/ubuntu focal InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY $key

是 nginx.org 公钥的问题,其中 $key 是一个数字串,执行以下代码,注意替换$key为上面报错信息里的数字串

## 把 $key 替换成报错的那个数字串
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys $key
sudo apt update

不报错的话,apt 源就更新成功了,如图

然后安装nginx。

sudo apt install nginx

安装成功后,启动 nginx。可以通过 nginx命令启动,也可以通过systemctl 启动

sudo systemctl start nginx

二. 安装 PHP

Ubuntu官方apt源里的PHP版本比较旧,PHP官方也没有 apt 源,按官方文档 PHP: Nginx 1.4.x on Unix systems - Manual 只能源码安装了。

通过 PHP: Downloads 下载源码,我下载的是 php-8.0.18.tar.gz ,解压

tar -xzvf php-8.0.18.tar.gz

进入到解压后的目录

cd php-8.0.18/

配置与编译

./configure --enable-fpm --with-mysqli
make
sudo make install

第一步./configure的时候会提示错误,缺少编译器,需要安装gcc,通过 sudo apt install gcc 安装即可。 也可能会提示缺少相关的工具,比如 libxml2, zlib等,同样通过 sudo apt install libxml2 libxml2-dev即可,需要注意的是提示缺少libxml2,光安装libxml2不行,还需要安装 libxml2-dev;安装zlib的时候,zlib的apt包名是 zlib1g,所以通过 sudo apt install zlib1g zlib1g-dev 来安装。其它缺少的包都这样安装就行。

make的时间会稍有点长,一二十分钟吧。

make完会提示让执行make test, 执行 make test 即可。

sudo make install完成后即安装完成了,接下来开始配置。

将源码目录中的 php.ini-development 拷贝到他们正确的位置,这个位置通过 php --ini 命令来查看,这个PHP默认加载php.ini的位置

目录是 /usr/local/lib, 拷贝到此目录

cp php.ini-development /usr/local/lib/php.ini

拷贝 php-fpm 的配置文件和执行文件到指定位置

cp /usr/local/etc/php-fpm.conf.default /usr/local/etc/php-fpm.conf
cp /usr/local/etc/php-fpm.d/www.conf.default /usr/local/etc/php-fpm.d/www.conf
cp sapi/fpm/php-fpm /usr/local/bin

当文件不存在时阻止Nginx转发到后端 php-fpm,编辑 php.ini 修改一个配置项

vim /usr/local/lib/php.ini

定位到 cgi.fix_pathinfo=, 去掉前面的分号,修改成

cgi.fix_pathinfo=0

编辑 php-fpm 的配置文件,修改一下 php-fpm 的启动用户和组

vim /usr/local/etc/php-fpm.d/www.conf

找到 user = nobody  group = nobody 这里,改成

user = www-data
group = www-data

启动 php-fpm

sudo /usr/local/bin/php-fpm

这里需要加 sudo,不然会提示没有权限。


配置完 PHP 的配置文件 和 php-fpm 的配置文件,接下来配置 Nginx 的配置文件了。

首先找到Nginx的配置文件的位置,通过 nginx -V 命令可以查看。

编辑此文件

sudo vim /etc/nginx/nginx.conf 

这个是 nginx 的总配置文件,打开后可以看到有两个重要信息

上面的 error_log 那一行是nginx的错误日志文件的位置,下面的 include 是包含的子配置文件的位置,这个文件以 http {} 为主, 在子配置文件里以 server{}为主,虚拟主机配置可以通过添加子配置文件来设置,打开子配置文件的目录 /etc/nignx/conf.d/ 看以下

只有一个子配置文件 default.conf,编辑此文件

sudo vim /etc/nginx/conf.d/default.conf

添加红框里内容

Nginx 配置完毕,重启一下。

sudo systemctl restart nginx

完事了,建一个 .php 文件测试一下吧。找到 nginx 的 文档根目录,打开 nginx 的配置文件里面有

sudo vim /etc/nginx/nginx.conf

切换到此目录,创建 index.php

cd /usr/share/nginx/html/
rm index.html
vim index.php

输入以下php代码

<?php
phpinfo();
?>

打开浏览器 http://localhost, 结果出现如下错误:


一切都是按照官方文档配置下来的, 就这一个模糊信息,到底是 nginx 的配置有问题,还是 php-fpm的配置或者php的配置有问题?

查看 headers,报的是 404 错误,根目录明明有 index.php,为什么还404错误呢?既然这里错误信息这么模糊,只能去错误日志里看看了。在上面的 /etc/nginx/nginx.conf 配置文件里可以看到 nginx 的错误日志目录在 /var/log/nginx/error.log, 打开此文件的最后看一下

tail /var/log/nginx/error.log

有一个错误,显示FastCGI返回了一个错误,没有找到此文件,/etc/nginx/html/index.php,在 /etc/nginx/conf.d/default.conf 这个配置文件里,明明文档根目录是 /usr/share/nginx/html

为什么会去 /etc/nginx/html 目录去找呢?

考虑到这个root 是在 location / 块里配置的, 新添加的那块是 location ~* \.php$ 块,有没有可能是那个块里也需要指定 root 配置项? 试一下

重启 nginx

sudo systemctl restart nginx

刷新浏览器 http;//localhost,终于出现如下页面

成功解决。


总结:nginx 对于 php 文件的请求会转发给后端的 php-fpm, 但是出现404错误的时候,并没有显示出详细的错误信息,只是显示了一个 No input file specified. 详细的错误信息需要到错误日志里去看。

No input file specified. Nginx PHP相关推荐

  1. php no input file specified.,nginx+php出现No input file specified解决办法

    在自己本地的开发环境突然出现了No input file specified错误,反复检查返现自己的配置文件和配置路径以及权限都没有问题.经过反复的排查终于发现了问题,现将问题及解决分享如下: 问题原 ...

  2. php启动后no input file specified.,nginx+php出现No input file specified解决办法

    今天在自己本地的开发环境突然出现了No input file specified错误,反复检查返现自己的配置文件和配置路径以及权限都没有问题.经过反复的排查终于发现了问题,现将问题及解决分享如下: 问 ...

  3. window下phpstudy用nginx报错No input file specified. nginx日志The filename, directory name, or volum label

    window下phpstudy使用nginx服务报错No input file specified. 但是反复检查路径都是正确没有问题, 切换成Apache时同样的路径有可以正常访问. 遂打开phps ...

  4. 解决NGINX PHP No input file specified

    解决NGINX PHP "No input file specified" 打开一个页面<?php  phpinfo(); ?>  然后在游览器下运行:页面提示 No ...

  5. windows下, nginx 提示错误 No input file specified

    一 环境介绍: win10,  LNMP 二 错误描述: 访问网站时,提示"No input file specified"错误. 排错阶段: 1. 查看nginx access日 ...

  6. Nginx配置Thinkphp3.2.3配置,访问Nginx报 No input file specified. 的问题解决

    Nginx配置Thinkphp3.2.3配置,访问Nginx报 No input file specified. 的问题解决 参考文章: (1)Nginx配置Thinkphp3.2.3配置,访问Ngi ...

  7. Nginx执行php,显示“No input file specified. ”的处理方法

    使用apt-get install nginx和php-cgi 配置好nginx和php,如果配置的请看网上教程,很多. 在/var/www/nginx-default中放上一份phpinfo.php ...

  8. nginx php No input file specified 怎样处理?

    配置nginx支持php 出现了No input file specified ? 仅仅要改动下安装文件夹下的  nginx.conf下的 location ~ \.php$ {           ...

  9. legend3---用Homestead配置后报错“No input file specified.”

    legend3---用Homestead配置后报错"No input file specified." 一.总结 一句话总结: 自己项目上传到github的时候多增加了一层lege ...

  10. 提示No input file specified的解决方法

    (一)IIS Noinput file specified 方法一:改PHP.ini中的doc_root行,打开ini文件注释掉此行,然后重启IIS 方法二: 请修改php.ini 找到 ; cgi. ...

最新文章

  1. java多线程3.设计线程安全类
  2. 日常生活小技巧 -- “Error: Encountered an improper argument”的解决方法
  3. JS判断是否选中的是表格内当前选中的那一行
  4. boost::locale::generator用法的测试程序
  5. linux中安装软件,查看、卸载已安装软件方法
  6. java随机姓名_Java生成随机姓名、性别和年龄的实现示例
  7. php email 发送,php 发送 Email
  8. 【狂神说】分析前后端分离开源项目?
  9. html头部中各式各样的meta
  10. mysql分段统计ceil
  11. ElementUI:input表单验证
  12. win10计算机丢失msvcr,Win10系统打开软件提示丢失msvcr110.dll如何解决
  13. 事件处理方式on、addEventListener和attachEvent
  14. pdf拆分成一页一页
  15. EXCEL密码清除(破解找回密码)——巧用宏代码
  16. 浏览器白屏原因思路分析
  17. 读《犹太人教子枕边书》
  18. Character类的常用方法
  19. BZOJ1777: [Usaco2010 Hol]rocks 石头木头
  20. TIA博途WINCC中英文切换的项目中摄氏度符号无法正常显示的解决办法

热门文章

  1. 《蜗居:心理健康枕边书》摘录
  2. 在Word中嵌入Mathtype公式编辑器
  3. f(!gotop.length) return false;
  4. pythonmd5解密代码_python写一个md5解密器示例,pythonmd5解密器
  5. 计算机科学中的哲学思想,冯_诺依曼的计算机科学哲学思想.doc
  6. [buuctf.reverse] 144_[XMAN2018排位赛]easyvm 147_[XNUCA2018]Code_Interpreter
  7. viper4Android md风格,ViPER4Android音效驱动
  8. C++ CURL使用
  9. 第一百二十七期:程序员41岁创业逆袭成全美最受欢迎CEO,公司市值近200亿美金
  10. 科普一下:1G, 2G, 3G,4G,5G历史发展和定义