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

时间:2012-07-27 00:31:57

标签: 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放在公共文件夹之外,但这意味着ajax也无法向它发出请求。

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

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

2 个答案:

答案 0 :(得分:1)

如果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();
}

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

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

然而,这仍然不是全面的,因为任何人都可以使用像Tamperdata这样的程序发送标题,但这应该足以防止懒惰的窥探。尽管如此,允许用户看到这个页面(如果他们窥探)将不会是一个大问题。它不会产生安全漏洞,如果用户偶然发现login.php页面,它们将被重定向回login.html

答案 1 :(得分:1)

根据AJAX的性质,您发送AJAX请求的任何内容也可以直接导航到。您所能做的就是不向用户提供该页面存在的任何指示。

您可以通过include选择让一个PHP文件调用另一个文件。这样,您可以根据请求请求login.php更改行为,但是登录处理实际上是由不可公开访问的文件处理的:

if($_POST) {include '../login-handler.php'; die();}