如何在服务器调用它的时候只运行PHP脚本

我有一个PHP脚本,这只能运行,如果服务器本身调用它。 像这样:form()。submit运行一个AJAX请求来POST表单数据。 我不想开发一个散列解码和编码系统来certificate请求是否被允许。

是否有一个简单的可能性来检查,如果“服务器运行脚本”,或者如果客户端要运行脚本? 如果没有,我可以使用.htpasswd

如果您使用的是Apache,您可以将您的脚本放在一个文件夹中,并添加一个htaccess文件(.htaccess)以下内容

deny from all 

这样当用户试图直接访问php脚本时,他们只会得到一个禁止的页面。 您只能通过在服务器中使用的php脚本的include / require方法访问文件。

你可以通过以下步骤做到这一点。

1)把你的PHP脚本放在你的web文档根目录之外,如/usr/local/phpscripts/

2)从你的代码运行这个脚本,如:

 $output = shell_exec('php /usr/local/phpscripts/your_script.php'); 

通过这样做,只有你的服务器可以调用你的脚本。 Web用户不能访问这个PHP脚本来执行

用户代理可用的脚本必须位于docroot内部,否则它们完全不可用。 假设这是你的项目结构:

 public_html/ |-- index.php src/ |-- somefile.php 

并假设您的文档根目录设置为public_html目录(通过虚拟主机配置),则src内的文件不能被用户代理访问。 因此,只有服务器可以通过在其他脚本中要求它们来运行它们。

如果你只想在include()时候执行你的脚本,那么你可以在包含脚本中设置一个变量并在这个脚本中进行检查。

script1.php:

 <?php $my_call = true; include('script2.php'); 

script2.php :(你不想被浏览器调用的脚本)

 <?php if(!$my_call){die('Access Denied.');} //your code here... 

否则,如果您只想从命令行使用脚本:

在脚本的最开始添加这一行:

 <?php if(php_sapi_name() !== 'cli'){die('Access denied.');} // your code next 

对于下面的评论:

 [root@xxxxx html]# cat test.php <?php echo php_sapi_name(); [root@xxxxx html]# php test.php cli 

现在从浏览器调用这个相同的脚本:

 apache2handler