为什么服务器上PHP脚本的工作方式不同?

<?PHP print "hello"; ?> 

我写这个代码并保存为“1.php”;

然后我把这个PHP脚本上传到我的服务器。

我有8个不同的免费托pipe服务器的帐户。

我注意到有两种types的服务器设置。

(1)
“A型”
为exapmle,sqweebs。

我们需要将PHP文件权限设置为640。
这意味着sqweebs服务器需要我们
为PHP脚本运行提供组权限。

如果我设置了604,那么服务器会产生这样的错误。例如,

警告:未知: 
未能打开stream:
 第0行的未知权限被拒绝

致命错误:未知: 
无法打开需要 
 '/www/sqweebs.com/1.php' 
 (include_path中= ':/ blahblah') 
在第0行的未知

(2)
另一方面,还有其他types的
这个世界上的服务器。

“B型”,
例如,izfree。

在这个服务器上,我发现
我可以让PHP脚本工作,如果我给它
604作为许可。


所以我想知道为什么有很多的服务器设置,
这是什么原因,和其他一些相关的
意见。

像我应该使用哪个服务器,或者等等。

为了执行您的PHP脚本,Web服务器需要能够读取脚本。 一般来说,出于安全原因,您的Web服务器(通常是Apache)以非root用户身份运行。

所以,要解决您的问题,我们首先需要确定您的Web服务器运行的是哪个用户。 这与Linux发行版有所不同,但是如果你打开你的httpd.conf文件(或Debian上的apache2.conf文件)并查找以“User”开头的行,你将会看到用户名。 在Debian上,你会看到“User www-data”或RH衍生发行版,通常是“User apache”。

现在你需要构build你的权限,这个用户可以“读取”你的php脚本。

最简单的方法是将权限设置为644,这将确保用户的Web服务器通过“世界”权限访问。

另一个select是将您的脚本的所有者更改为您的www-data或apache用户(如上所述),并将权限设置为400.这会使脚本无法访问除Web服务器以外的所有用户。

如果您需要提供FTP访问权限,最后一个选项尤其有用,那就是将组所有者更改为www-data或apache,并将权限设置为640.这使用户拥有对该脚本和Apache的完全读写访问权限读取它需要的访问权限,同时locking其他人。

在上面的例子中,如果apache用户通过脚本拥有组的所有权,那么使用604将阻止PHP打开sqweebs服务器上的文件。 同样,你的izfree服务器上的640如果Apache用户既没有用户也没有组文件的所有权,将失败。 我猜在这两种情况下644都可以工作,但是如果不知道用户/组拥有哪些脚本,就很难说清楚。

networking服务器期望文件必须具有运行该networking服务器的用户的权限,以打开并运行该文件。

所以,如果web服务器(比如说Apache)运行的是www,那么www应该可以读取文件。 (一些运行Apache为www,有些运行它为apache,或没有人)。

上传文件时,根据umask的设置,文件许可权设置为。 (所以,在一台主机上,当没有明确设置权限时,该文件可以具有权限655或者其他可以是600)。

如果您对通常部署应用程序的操作系统有所了解,它总是有帮助的。 大多数情况下,PHP部署在* nix系统上,许可scheme在所有* nix系统中几乎(几乎总是)相同。

尝试获得“Unix系统pipe理手册”(Evi Nemeth&Co)。 它很有趣,阅读和易于理解(这是一个旧版本,但Unix的权限没有改变)

此外,请确保您的服务器可以处理DOS行结束设置(您在Windows上开发代码?)。 确保保存时,将其保存为“Unix格式”EOL(行尾)。 (像Dreamweaver这样的大多数编辑器都提供了这个function)。 大多数托pipe(PHP)提供程序都运行某种forms的* nix(freeBSD,Linux等),并且这些服务器上的Web服务器会导致Windows EOL格式