未指定输入文件
Posted
技术标签:
【中文标题】未指定输入文件【英文标题】:No input file specified 【发布时间】:2013-01-11 10:26:27 【问题描述】:我正在运行Anchor CMS,我刚刚升级到版本 0.8。当我尝试运行安装程序时,出现“”错误。我认为这很可能是 .htaccess 问题,但我不确定正确的设置应该是什么。
我的网站可以找到here。
我的 .htaccess 设置为:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase base
# Allow any files or directories that exist to be displayed directly
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
# Rewrite all other URLs to index.php/URL
RewriteRule ^(.*)$ index [L]
</IfModule>
<IfModule !mod_rewrite.c>
ErrorDocument 404 index.php
</IfModule>
如果有帮助,我还会使用 GoDaddy 作为托管服务提供商。
【问题讨论】:
这个问题没有提供足够的信息。无法回答。 它可以是 .htaccess 或您在管理员中的 url 设置(如 seo、url 重写)或清除您的服务器和网站缓存。为此,请转到您的服务器帐户并尝试结束网络进程。 @arkascha 抱歉,我还需要提供哪些其他信息?感谢您的及时回复。 All 信息可用:你看到的那个短字符串真的是 all 吗? 在哪里你看到的? http 服务器日志文件中有什么内容?访问和错误日志?你提到的.htaccess
文件长什么样?你打的网址是什么?或者:那是什么类型的安装程序? ...
我在 Laravel 和我的本地环境中遇到了这个问题。解决方案是重新配置 vagrant:vagrant reload --provision
【参考方案1】:
未指定输入文件 是由于在您的服务器上实现 PHP 所显示的消息,在这种情况下表示 CGI 实现(可以通过phpinfo()
进行验证)。
现在,要正确解释这一点,您需要对您的系统如何使用 URL 有一些基本的了解。根据您的 .htaccess 文件,您的 CMS 似乎希望 URL 作为 PATH_INFO
变量传递。 CGI 和 FastCGI 实现没有 PATH_INFO
可用,因此当尝试传递 URI 时,PHP 失败并显示该消息。
我们需要找到替代方案。
一种选择是尝试解决此问题。查看core php.ini directives 的文档,您可以看到您可以更改实现的工作方式。虽然,GoDaddy 可能不允许您在共享环境中更改 PHP 设置。
我们需要找到修改 PHP 设置的替代方法
查看第 40 行的 system/uri.php
,您会看到 CMS 尝试了两种类型的 URI 检测 - 第一种是 PATH_INFO
,我们刚刚了解到它不起作用 - 另一种是 REQUEST_URI
。
这基本上应该足够了 - 但是解析传递的 URI 会给你带来更多麻烦,因为你可以传递给 REQUEST_URI
变量的 URI 强制 parse_url()
只返回 URL 路径 - 这基本上让你回到零。
现在,实际上只剩下一种可能性——那就是改变 CMS 的核心。 URI检测部分不足。
将QUERY_STRING
添加到第40 行的数组中,作为system/uri.php
中的第一个元素,并将您的.htaccess 更改为如下所示:
RewriteEngine On
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
这会将您请求的 URI 作为 QUERY_STRING
传递给 index.php
,并通过 URI 检测找到它。
另一方面,这使得在不更改核心文件的情况下无法更新 CMS,直到该问题得到修复。太烂了……
需要更好的选择吗? 寻找更好的 CMS。
【讨论】:
谢谢!我的 .htaccess 中有RewriteRule ^(.*)$ /index.php/$1 [L]
(没有问号),在虚拟共享主机上使用 ExpressionEngine。今天由于来自 OP 的错误消息而意外中断。我猜网络托管服务商更新了一些东西。 RewriteRule ^(.*)$ /index.php?/$1 [L]
(带问号)已修复。
有什么办法可以拦截这个错误并用自定义消息替换? (nginx) 谢谢
我有:RewriteEngine On
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule .* index.php/$0 [PT]
...当我刚刚将最后一行更改为:RewriteRule ^(.*)$ index.php?/$1 [L]
非常感谢您!我正在升级一个非常旧的 SlimPHP 站点,该站点当前在 PHP 5.3 上运行并遇到了这个问题。我已经准备好进行长时间的谷歌搜索,但你的修复为我解决了这个问题。【参考方案2】:
引用http://support.statamic.com/kb/hosting-servers/running-on-godaddy:
如果您想将 GoDaddy 用作主机并且发现自己在控制面板中收到“未指定输入文件”错误,则需要使用以下规则在您的 weboot 中创建一个
php5.ini
文件:
cgi.fix_pathinfo = 1
最好的简单答案只需更改一行即可。
推荐用于 godaddy 托管。
【讨论】:
也许你想引入相关代码并解释一下。如果链接过时,那么您的回答对未来的访问者将毫无意义。 我尝试了你的建议,效果很好!将cgi.fix_pathinfo = 1
添加到您的 php5.ini 文件中
在本地服务器 (Laragon) 上运行的应用程序如何使用 PHP7
,在这种情况下与您的解决方案等效的是什么?【参考方案3】:
在我的例子中,php.ini open_basedir 变量中有一个错误。
【讨论】:
【参考方案4】:我遇到了同样的问题。我为解决这个问题所做的只是像这样修改我的 htacces 文件:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /crm/
Options +FollowSymLinks
RewriteCond %HTTP_HOST ^mywebsite.com [NC]
RewriteRule ^(.*)$ http://www.mywebsite.com/$1 [L,R=301]
RewriteRule ^index\.php$ - [L]
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule . /index.php [L]
RewriteRule ^index.php/(.*)$ [L]
</IfModule>
【讨论】:
【参考方案5】:GoDaddy 目前(2013 年 2 月)支持为某些使用 PHP 5.2.x 或更早版本的帐户修改 FastCGI。请参阅 GoDaddy 文章“Disabling FastCGI in Your Hosting Account”。 (在我的例子中,这显然是帮助当前版本的 LimeSurvey (2.0) 进入运行状态所必需的。)
【讨论】:
【参考方案6】:添加 php5.ini 根本不起作用。 但请参阅 GoDaddy 上这篇文章中的“禁用 FastCGI”部分:http://support.godaddy.com/help/article/5121/changing-your-hosting-accounts-file-extensions
将这些行添加到 .htaccess 文件(webroot 和网站安装目录):
Options +ExecCGI
addhandler x-httpd-php5-cgi .php
它为我节省了一天的时间!干杯! 谢谢DragonLord!
【讨论】:
【参考方案7】:它对我有用..add 在 .htaccess 文件之上。它会在 godaddy 共享主机帐户上禁用 FastCGI。
选项 +ExecCGI
addhandler x-httpd-php5-cgi .php
【讨论】:
【参考方案8】:更新
之前的所有评论都经过我的测试,但没有解决方案。但我没有放弃。
解决方案
在我的 NGINX 配置中取消注释以下行
[/etc/nginx/site-avaible/sitename.conf]
站点启用文件夹中应遵循相同的代码
#fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name;
并对此发表评论:
fastcgi_param SCRIPT_FILENAME / www / namesite / public_html $ fastcgi_script_name;
我在原来的基础上改了好几次:
#fastcgi_pass unix: /var/php-nginx/9882989289032.sock;
回到这个:
#fastcgi_pass 127.0.0.1:9007;
最后我找到了有效的方法......
fastcgi_pass localhost: 8004;
我也推荐这些线路...
#fastcgi_index index.php;
#include fastcgi_params;
甚至 FastCGI 超时(仅用于提高性能)
fastcgi_read_timeout 3000;
在此过程中,我检查了 NGINX 日志中的所有修改。 (这很重要,因为它显示了错误的参数。) 在我的情况下是这样的,但这取决于配置:
error_log/var/log/nginx/site_error_log;
测试 NGINX 配置
nginx -t
注意这是选项之一... 好吧,在同一台服务器上,在这个网站上不起作用的东西在其他网站上也起作用......所以请记住,设置取决于平台。
在这种情况下,它适用于 Joomla CMS。
【讨论】:
【参考方案9】:运行ulimit -n 2048
然后重启php/php-fpm
【讨论】:
【参考方案10】:禁用 PHP-FPM 解决了我的问题。
【讨论】:
【参考方案11】:我的解决方案是删除我的一个帮助文件中的空白。该错误列出了涉及的两个页面,一个 CI 会话文件和一个我的自定义助手。
【讨论】:
【参考方案12】:在我的情况下,我通过在 LocationMatch Directive 中插入规则来修复它
<LocationMatch "^/.">
#your rewrite rules here
</LocationMatch>
/.
匹配任何位置
我在 Apache 的 .conf
文件之一中有重写规则NOT .htaccess
文件。
我不知道为什么这对我有用,这是我目前的设置
Apache 2.4 版 PHP 7.1 操作系统 Centos 7 PHP-FPM【讨论】:
以上是关于未指定输入文件的主要内容,如果未能解决你的问题,请参考以下文章
Android 模拟器无法连接到本地服务器(未指定输入文件)
Codeigniter“未指定输入文件”即使粘贴新的.htaccess