【问题标题】:Return HTML or XML based on request in PHP在 PHP 中根据请求返回 HTML 或 XML
【发布时间】:2011-06-03 07:32:22
【问题描述】:

有一个用 PHP 编写的现有网站。最初只有网站存在,但现在正在构建一个 Android 应用程序,该应用程序将受益于重用一些 PHP 逻辑。

PHP 站点的结构使得有许多页面执行操作,在$_SESSION 中设置成功/错误信息,然后重定向到可视页面而不输出任何内容本身。比如有action_login.php

页面接受用户名和密码(来自 GET 或 POST 变量),验证凭据,在 $_SESSION 中设置成功/失败消息,然后在成功时重定向到登录主页或在失败时返回登录屏幕.我们将这种行为称为“HTML 响应”。

Android 应用程序将需要调用同一个页面,但以某种方式告诉它它需要一个“XML 响应”。当页面检测到这一点时,它将以 XML 格式输出成功/错误消息,而不是将它们放入 $_SESSION 并且 不会 重定向。反正就是这个想法。这有助于防止重复代码。我不想让action_login.phpaction_login.xml.php 飘来飘去。

我了解到 Accept Header 不够可靠,无法使用(请参阅:Unacceptable Browser HTTP Accept Headers (Yes, You Safari and Internet Explorer))。我的后备解决方案是 POST xml=1 或使用 {url}?xml=1 进行 GET 请求。有没有更好的办法?

没有使用任何框架,这是纯 PHP。

【问题讨论】:

    标签: php xml httprequest


    【解决方案1】:

    这就是 Accept Header 的用途。让 Android 将页面请求为 application/xml,然后检查脚本中请求的内容。在使用 Apache 时,您可能还对 mod_negotiation 感兴趣。或者在Android时使用WURFL检测UserAgent并作为XML服务。

    【讨论】:

    • ...这可能对 android 应用非常有用。我担心的是行为不端的浏览器没有正确使用标题并导致用户看到 xml 文档而不是登录的主页。
    • @colithium 好吧,格式错误的请求就是格式错误的请求。我能想到的唯一其他选择是使用 WURFL 来检测用户代理。
    • 我添加了一个链接,解释了 WebKit 的作用,这是我所害怕的
    • @colithium 是的,好吧,就像我说的:格式错误的请求是格式错误的请求。如果人们以错误的方式使用您的 API,那是他们的错,而不是您的错。如果您不想依赖 AcceptHeader,请通过 WURFL 检测 UserAgent。见stackoverflow.com/search?q=php+wurfl
    【解决方案2】:

    我会使用 android 应用程序为每个请求发送一个 cookie(我真的更喜欢 Accept 标头,但是对于您在 webkit 中指出的问题,我理解您不愿意这样做)。 cookie 将代码服务器端简化为不必检查 $_GET['xml'] 或 $_POST['xml'],如果某些 android 用户共享您的应用程序的 URL 并且它有一个 ?xml=1,在计算机浏览器中打开它的用户将收到 XML 而不是正常的 Web 输出。

    我不会将 $_SESSION 用于移动应用程序,因为移动平台上的用户(或至少我这样做)倾向于打开您的应用程序,玩 5 分钟,将手机放在口袋里,然后在 2 小时后返回您的应用程序。你想把会话的生命周期设置这么长吗?

    【讨论】:

      【解决方案3】:

      为什么不为应用程序设置一个特定的会话,然后只在会话设置的时候设置标题

      $_SESSION['app'] = "andriod app";
      
      if ($_SESSION['app'] == "andriod app") {
        header..
      

      不太确定如何在应用中实现这一点,因为我对应用所做的工作很少,但希望这有助于您的思考过程

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-17
        • 2012-08-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多