如何制作.PHP文件只能访问服务器?

时间:2011-11-18 21:23:49

标签: php permissions

我通过goDaddy控制中心创建了一个cron作业。

cron作业位于“cron jobs”文件夹中。

我不希望任何人能够运行它,我应该如何设置文件夹的权限,以便它不能公开打开,但它仍然可以用于cron作业?

取消选中公开>阅读是否足以阻止任何人运行它?

5 个答案:

答案 0 :(得分:9)

只需将文件放在webroot / document根文件夹之外。

答案 1 :(得分:5)

在.htaccess中添加此内容。

<Location /cronjobs>
order deny,allow
deny from all
allow from 127.0.0.1
</Location>

我在127.0.0.1中包含allow,因此它可以从服务器运行,即cron仍然可以运行。

答案 2 :(得分:1)

将它放在一个目录中,并在该目录中创建一个名为.htaccess的文件,其中包含:

<FILESMATCH "\.php$">
  order deny,allow
  deny from all
</FILESMATCH>

现在只有服务器可以访问该目录中的PHP文件。例如,includerequire

这对于保持MySQL密码安全很有用,您可以将连接函数放在这个“受保护”目录中的PHP文件中,并将其包含在脚本中。

答案 3 :(得分:1)

您拥有的一个选项是使用$ _SERVER值来查看它是Web请求还是cli请求。

请参阅http://php.net/manual/en/reserved.variables.server.php

我会查看是否在脚本开头设置了$_SERVER['argv']值。如果未设置则退出脚本。

或者,您可以查看是否设置了$_SERVER['SERVER_ADDR'],这意味着它正在由网络服务器执行。

请注意,我没有使用godaddy帐户进行测试,因此请确保在上线前进行验证。

答案 4 :(得分:1)

另一种可能的解决方案,如果该文件仅用作include(),而不是由在网址中输入该文件的用户单独运行。

将此代码放在要阻止直接调用的文件的顶部。

if(basename($_SERVER['PHP_SELF']) == 'blockedFile.php')
    {
    header('Location: ./index.php');
    exit();
    }

PHP检查文件的名称是否是直接运行的名称。如果在带有include()的index.php中包含了blockedFile.php,那么basename($_SERVER['PHP_SELF'])将等于index.php。如果它是独立的,它将等于blockedFile.php并将用户发送回索引页面。