没有指定输入文件

时间:2013-01-28 05:32:50

标签: php apache .htaccess anchor-cms

我正在运行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作为托管服务提供商。

12 个答案:

答案 0 :(得分:106)

指定无输入文件是因为您的服务器上实现了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,我们刚刚学到的不起作用 - 另一种是{{1} }。

这基本上应该足够了 - 但是传递URI的解析会给你带来更多麻烦,因为你可以传递给REQUEST_URI变量的URI会强制parse_url()仅返回URL路径 - 基本上会让您回到零。

现在,实际上只剩下一个可能性了 - 这正在改变CMS的核心。 URI检测部分不足。

REQUEST_URI添加到第40行的数组中,作为 QUERY_STRING中的第一个元素,并将.htaccess更改为如下所示:

system/uri.php

这会将您请求的URI传递给RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?/$1 [L] index.php,并通过URI检测来查找它。

另一方面,这使得在不修改核心文件之前更新CMS是不可能的,直到修复为止。那糟透了......

需要更好的选择吗?
找一个更好的CMS。

答案 1 :(得分:20)

引用http://support.statamic.com/kb/hosting-servers/running-on-godaddy

  

如果您想将GoDaddy用作主机,并且您发现自己在控制面板中收到“未指定输入文件”错误,则需要使用以下规则在weboot中创建php5.ini文件:

     

cgi.fix_pathinfo = 1

最简单的答案就是只换一行就可以了。

推荐给godaddy托管。

答案 2 :(得分:7)

就我而言,php.ini open_basedir变量中存在错误。

答案 3 :(得分:6)

我遇到了同样的问题。我所做的就是修复我的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>

答案 4 :(得分:3)

GoDaddy目前(2013年2月)支持使用PHP 5.2.x或更早版本修改某些帐户的FastCGI。请参阅GoDaddy文章“Disabling FastCGI in Your Hosting Account” (就我而言,显然有必要帮助将当前版本的LimeSurvey(2.0)推向运行状态。)

答案 5 :(得分:2)

添加php5.ini根本不起作用。 但请参阅&#39; 禁用FastCGI &#39;本文关于GoDaddy的部分:http://support.godaddy.com/help/article/5121/changing-your-hosting-accounts-file-extensions

将这些行添加到.htaccess文件(webroot&amp;网站安装目录):

Options +ExecCGI
addhandler x-httpd-php5-cgi .php

它节省了我一天!干杯! 谢谢DragonLord

答案 6 :(得分:2)

它对我有用..添加在.htaccess文件之上。它会在godaddy共享主机帐户上禁用FastCGI。

选项+执行

addhandler x-httpd-php5-cgi .php

答案 7 :(得分:2)

运行ulimit -n 2048

然后重启php / php-fpm

答案 8 :(得分:0)

我的解决方案是删除其中一个帮助文件中的空格。错误列出了两个页面,一个CI会话文件和一个自定义帮助程序。

答案 9 :(得分:0)

更新

以前的所有评论均由我测试过,但没有解决方案。但是我没有放弃。

解决方案

在我的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。

答案 10 :(得分:0)

在我的情况下,我通过将规则插入LocationMatch Directive

中来修复了问题
<LocationMatch "^/.">
    #your rewrite rules here
</LocationMatch>

/.匹配任何个位置

我在Apache .conf文件的.htaccess文件之一中具有重写规则。

我不知道为什么这对我有用,这是我当前的设置

  • Apache 2.4版
  • PHP 7.1
  • OS Centos 7
  • PHP-FPM

答案 11 :(得分:0)

禁用PHP-FPM解决了我的问题。