我可以为基于 PHP 的站点使用 npm 安装 Fabric.js 吗?

Can I install Fabric.js using npm for a PHP-based site?

我目前正在和另外两个人一起做一个项目。我们需要创建一个小型网站,允许您上传照片,然后在其上输入自定义文本作为叠加层。

根据我的研究,Fabric.js 完全符合我们的要求。但是,主要站点和某些功能(例如照片上传)已经内置在 PHP 中,因为这是另一个人的主要技能之一,我只能找到 Node.js 方法(npm或凉亭)安装 Fabric.js。我已经熟悉 Node.js 并安装了 npm,但是如果我创建单独的 .js 文件并在 index.php 中为它们创建 link 它是否与 PHP 兼容?如果没有,我的替代方案是什么(最好是 JavaScript 或 jQuery,但我对其他选项持开放态度)?

因此,您将无法直接从 PHP 调用 npm 模块。也就是说,您始终可以 运行 来自 PHP 的小型节点程序作为简单的 shell 命令,但我不建议这样做。

我建议在客户端包括 fabric.js 而根本不使用 node.js。只需让用户在他或她的浏览器中在其上叠加文本,然后上传图片即可。

PHP 在服务器上只有 运行s,所以你可以用它来提供完成工作所需的任何浏览器端 js 代码,但它不会解释 javascript 为您编写代码并执行它。

如何运行FabricJS

FabricJS 可以 运行 两种方法 - 客户端或服务器端。

在客户端,它是一个简单的 Javscript 文件,您需要将其加载到网页中。通过这种方式,您可以创建一个 GUI,用户可以在其中操作图像并根据需要保存图像。这就是 examples on the FabricJS website 正在做的事情。

在客户端,FabricJS 需要在 NodeJS 服务器上 运行。您可以找到一些 basic instructions on the FabricJS website 来了解如何在 NodeJS 中 运行 它。

优点/缺点

每种方法各有利弊。

在我看来,客户端设置更易于编程(尽管我是一名网络开发人员)并且允许您构建一个 GUI,为您的用户创建一个易于使用的界面。但是,浏览器和客户端计算机可以 运行 受到限制。例如,如果您正在渲染高分辨率图像,它可能会有一些限制,特别是如果您要将图像发送到服务器。移动设备有高分辨率图像的问题。

服务器端设置取消了大部分限制,但取消了任何 GUI 选项。但在其中工作确实没那么糟糕。首先让我失望的最重要的事情是,如果你对 NodeJS 代码进行了任何更改,你需要在它们生效之前重新启动 NodeJS 服务器。但是,如果您熟悉 NodeJS,那就不是什么新鲜事了。

服务器设置

有了这个背景,您的问题是如何在 PHP 服务器上 运行 FabricJS。如上所述,FabricJS 需要 NodeJS 运行。您可以简单地在 PHP 服务器上安装 NodeJS。在此配置下,您现在将在同一域 name/IP 地址处拥有两个网络服务器 运行ning。因此,两者之一将需要不同的端口。示例:

http://www.myPHPserver.com (Apache/Nginx on port 80)

http://www.myPHPserver.com:8080 (NodeJS on port 8080 or any open port)

或者,您可以选择在不同的服务器上安装 NodeJS 和 FabricJS,以避免端口冲突。示例:

http://www.myPHPserver.com (Apache/Nginx on port 80)

http://www.myNodeJSserver.com (NodeJS on port 80)

跨源脚本

如果您使用网络服务器来处理您的 FabricJS 脚本,您将 运行 陷入 cross-origin 您需要处理的脚本问题。这将在上面提供的两个服务器配置示例下发生,因为端口或域名导致 cross-origin 设置。但这可以通过执行以下操作来克服:

  • 服务器
    • 在图片上设置access-control-allow-originheader。
  • Browser/client
    • 设置图片的crossOrigin属性为Anonymous

您可以从这篇文章中阅读有关如何执行此操作的更多信息 - Fabric JS Tainted Canvas – Cross-Origin Images

另一种处理 cross-origin 图片的方法是使用 server proxy as described here.

在 NodeJS 上安装 FabricJS

如果您需要帮助在 NodeJS 上安装 FabricJS,这里有一些安装指南。

Install FabricJS on Debian Squeeze 6.0.10

Install FabricJS on Ubuntu 12.04 precise

运行 PHP 来自 NodeJS 的脚本

根据您的问题,这听起来不像是必需的,但我想我至少会提到它。如果您需要从 NodeJS 服务器调用 PHP 脚本,可以使用 exec 命令来完成。

NodeJS 服务器

var runner = require("child_process");

var phpScriptPath = "path/to/your/php/script.php";
var argsString = "value1,value2,value3";
runner.exec("php " + phpScriptPath + " " +argsString, function(err, phpResponse, stderr) {
if(err) console.log(err); /* log error */
  console.log( phpResponse );
});

PHP 脚本

<?php
$params = explode(",", $argv[1]);
echo $params[0] ." - " . $params[1] . " - " . $params[2];
?>

致电PHP script from NodeJS