PHP 页面作为函数/进程模块

标签 php process module

首先,这是我在 Stack Overflow 上的第一篇文章,我正在尝试为我正在从事的个人项目学习 PHP/MySql。我想我会花很多时间在这里问很多问题,所以如果我问太多你可能觉得微不足道的问题,请原谅我。

继续提问。

我使用 ajax 和 PHP 的组合来处理服务器端脚本。我想要做的是拥有一个 PHP 模块来接受输入、处理某些内容并提供输出。很像一个函数。

我想要思考的是如何使 PHP 像一个黑盒进程模块,像一个函数,而不是一个页面。

作为示例,我有一个 login.html 页面,它使用 AJAX 将请求发送到 login.php 页面。 login.php 接受输入,处理输入,并输出一个 json 对象,该对象告诉调用页面是否成功,如果不成功,将列出一路上遇到的错误。

问题就出在这里。我不希望用户能够直接访问login.php。事实上,我什至不希望 login.php 对公众可见。 login.php只是一个进程,所以如果你去它,它会是空白的。让用户看到空白页面似乎不是一个好的做法。

我考虑过将 login.php 放在 public 文件夹之外,但这意味着 ajax 也无法向它发出请求。

为了解决这个问题,我将login.html 放在login.php 中。它会向自身发出请求,然后根据请求的类型,php 将执行不同的操作。这将解决“空白页”问题。但我不禁想知道是否有一种方法可以制作一个独立的 PHP 模块,而不必使其像页面一样工作。

任何对此的想法都将不胜感激。谢谢。

最佳答案

如果 AJAX 可以请求该页面,那么任何用户都可以使用其浏览器导航到该页面。您确实不应该担心这一点,因为除非它们四处窥探,否则它们不会发生在 PHP 页面上。如果您想要验证该请求是由 AJAX 发出的,您可以 look for the X-Requested-With header ,但这并不总是有效,因为并非每个浏览器都会发送此内容:

if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
    // Ajax Request
} else {
    // Not AJAX, redirect to login page
    header('Location: login.html');
    exit();
}

为了使其在每个浏览器上可靠地工作,您需要在客户端设置此 header :

xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");

然而,这仍然不是完全可靠的,因为任何人都可以使用像 Tamperdata 这样的程序发送 header ,但这应该足以防止懒惰的窥探。不过,再次强调,允许用户查看此页面(如果他们窥探的话)不会是一个大问题。它不会造成安全漏洞,并且如果用户偶然发现 login.php 页面,他们将被重定向回 login.html

关于PHP 页面作为函数/进程模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11679953/

相关文章:

matlab - 从 matlab 中检测 matlab 进程

linux - 当我们使用 "<"重定向时,shell 做了什么?

javascript - 需要一些帮助来理解 JS 模块模式的基础知识

javascript - 如何根据点击从时间选择器字段中获取值?

php - 显示数据库中存储的图像

php - Openfire:存档消息 NULL 参与者

php - Mysql 从最大到最小对行和列进行排名并在 php 代码中显示排名?

arrays - 使用 .NET 多线程运行同一应用程序的多个实例

class - TypeScript 静态成员与带有类名的命名空间

javascript - 如何在 Javascript 中导入语法之前运行几个代码?