【问题标题】:Simple PHP contact form with Firebase hosting带有 Firebase 托管的简单 PHP 联系表
【发布时间】:2016-02-20 13:18:58
【问题描述】:

我正在尝试使用以下方法测试 PHP 是否可以在我的 Firebase 托管中运行:

(index.html)

<form action="welcome.php" method="post">
   <input type="submit">
</form>

(welcome.php)

<?php

   $to = "my@email.com";
   $subject = "My subject";
   $txt = "Hello world!";
   $headers = "From: dummy@email.com";

   mail($to,$subject,$txt,$headers);

?>

每次我尝试这样做时,浏览器都会继续尝试打开 PHP 文件而不是处理它。 Firebase 服务器托管上是否启用了简单的 PHP 来处理这样的简单表单?如果我能让它以这种方式工作,我将正确构建表单,包括验证等。

谢谢,

【问题讨论】:

  • 检查您的 Apache httpd.conf 文件(或 /extra/mod_php.conf)并添加/取消注释 AddType application/x-httpd-php .php
  • Firebase 托管仅用于静态文件 - 没有 PHP 或其他服务器端处理
  • 我不相信我可以访问任何一个有问题的文件,因为 Firebase 托管似乎阻止了对这些文件的访问 (firebase.com/docs/hosting)。有没有其他方法可以检查出来?
  • 您可以使用任何这些 Angular Ember Knockout React Node JS

标签: php firebase


【解决方案1】:

来自Firebase Hosting site(强调我的):

我们通过安全的 SSL 连接提供您的所有静态内容(html、js、图像等),并在 CDN 上提供。

Firebase 托管用于托管静态资产。 Firebase 目前不提供在 Firebase 的服务器上执行您的代码的任何方式。

更新 (2018-08-08):您现在可以运行 Node.js/JavaScript 代码,但 connecting your Firebase Hosting project to Cloud Functions + Firebase Hosting。但这仍然不允许您运行 PHP 代码。

【讨论】:

  • 感谢您进一步澄清这一点,我不知道这是否会影响 PHP 处理,现在显然是这种情况。有没有其他方法可以使用 Firebase 托管处理简单的表单以通过电子邮件发送表单内容?
  • 我已经看过这个了,虽然我宁愿网站直接处理表单内容并通过电子邮件发送给该人。我已经读到您可以将 Zapier 作为另一个选项与 Firebase 集成,尽管我不确定这是否是我需要的 (zapier.com/zapbook/firebase/mandrill)。
  • Firebase 函数只是构建 G Cloud 函数的简单方法。在 GCF 中,您可以运行多种不同的语言,包括 PHP
【解决方案2】:

根据最新更新,firebase 已开始使用 Cloud Functions

Cloud Functions for Firebase 可让您运行自动响应由 Firebase 功能和 HTTPS 请求触发的事件的移动后端代码。您的代码存储在 Google 的云中并在托管环境中运行。无需管理和扩展您自己的服务器。

更多:https://firebase.google.com/docs/functions/

【讨论】:

    【解决方案3】:

    没有PHPnodeJS 可用于服务器端脚本...

    Google Cloud Functions 是用 JavaScript 编写的,并在 Node.js 运行时。

    Mandrill 还支持nodeJS,它具有Webhooks API。 因此,可以在这些“云功能”和“网络挂钩”中要求该节点模块......然后将 HTML 表单发布到它们上。

    需要在 Firebase 控制台上定义一些 HTTP 云函数,以便让他们订阅、取消订阅和管理他们的订阅。甚至可以使用云功能为输入表单生成 HTML 标记,然后附加它。例如,未经测试且不包括任何保证:

    const functions = require('firebase-functions');
    const mandrill = require('mandrill-api/mandrill');
    var client = new mandrill.Mandrill('YOUR_API_KEY');
    
    /* TODO: add the user on Firebase, respond through the API */
    exports.user_add = functions.https.onRequest((req, res) => {
    
    });
    
    /* TODO: change subscription settings on Firebase, respond through the API */
    exports.user_edit = functions.https.onRequest((req, res) => {
    
    });
    
    /* TODO: remove the user on Firebase, respond through the API */
    exports.user_remove = functions.https.onRequest((req, res) => {
    
    });
    
    /* optional: generate the HTML markup of the form, send HTTP response */
    exports.markup = functions.https.onRequest((req, res) => {
    
    });
    

    可以绑定 Firebase Auth 的事件,以保持两个用户数据库同步(Mandrill 不需要,但 MailChimp 需要 - 无论使用 PHP 还是 nodeJS 包装器):

    exports.on_user_create = functions.auth.user().onCreate(event => {
       const user = event.data;
    });
    
    exports.on_user_delete = functions.auth.user().onDelete(event => {
       const user = event.data;
    });
    

    Firebase on Websites 解释它,而云函数有一个本地 Emulator

    【讨论】:

      【解决方案4】:

      您可以使用其中任何一种:Angular、Ember、Knockout、React、 节点 JS。几乎所有的 Javascript 技术都可以用 PHP 代码做同样的事情——只是没有动态语言。另一种方法是使用在线表单提供程序,如 Jot Forms 或其他。您可以使用在线表单帐户创建表单并为其设置样式,然后只需将其添加到您的站点即可。然后当用户发布它会发布到表单。因此,您拥有一个集中的环境,不仅适用于您当前的站点,也适用于未来的任何其他站点。您可以创建一个 Web 服务并在那里发布值 - 然后对它们做任何您想做的事情:将它们保存到数据库中......换句话说,有另一台服务器可以处理所有这些事情,因此您可以从 Firebase 托管站点调用它。希望有帮助

      PS:我目前正在构建一个产品,它是用于 Firebase 网站的在线表单的简化版本。我现在计划让几个人使用,所以如果您愿意,可以给我发电子邮件,我会创建一个帐户供您使用。只要没有像发送一堆电子邮件这样的滥用行为 - 你会没事的!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-22
        • 1970-01-01
        • 1970-01-01
        • 2015-10-17
        • 2018-02-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多