未指定输入文件

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

【讨论】:

以上是关于未指定输入文件的主要内容,如果未能解决你的问题,请参考以下文章

未指定输入文件

.htaccess 问题:未指定输入文件

Android 模拟器无法连接到本地服务器(未指定输入文件)

Codeigniter“未指定输入文件”即使粘贴新的.htaccess

网址在 codeigniter 中无法正常工作,给出错误“未指定输入文件”。

未指定输入文件 - apache 和 php-fastcgi