【问题标题】: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

标签: php apache .htaccess mod-rewrite anchor-cms


【解决方案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

                    【讨论】:

                      猜你喜欢
                      • 2017-07-24
                      • 2014-12-12
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2015-09-18
                      • 1970-01-01
                      • 2015-09-01
                      相关资源
                      最近更新 更多