0

我正在编写一个基本的 Web 服务来渲染具有良好照明和阴影的色板,在其“命令行”模式下使用搅拌器,并从 php 脚本调用(该脚本还处理数据库中的编目色板)。一切都在win32上的apache下运行,使用php 5.2

一切似乎都运行良好,直到实际渲染某些东西的最后一步都失败了。我尝试过使用所有不同的 php 执行命令(exec()、system()、passthru() 等),结果都相同——例如什么都没有。奇怪的是它正在工作,因为如果我将格式错误的参数传递给搅拌机,那么 php 会回显来自搅拌机的正确错误消息,这会验证它肯定正在启动程序。如果我提供正确的参数,那么 exec() 等就会挂起,并且任务管理器中不会出现任何搅拌机进程。

我感觉这是一个文件权限问题,因为 Blender 需要将 jpg 文件写入 web 文件夹(该文件夹位于默认的 apache 安装目录中,例如:在程序文件中),但我不知道如何设置正确的权限在窗户下。

从命令窗口执行我的渲染命令完全符合它的要求并输出渲染文件,但 PHP 中的相同命令失败。

这是我的 php 代码(在这种情况下使用 system() 但所有其他变体似乎具有相同的结果):

$swatchId = $args->swatchId;
$sql = "SELECT * FROM `colours` WHERE `Id` = ".$swatchId." LIMIT 0, 1 ";
$rows = mysql_query($sql);
$command =  ".\blender\blender -b _swatches.blend ";

while ($row = mysql_fetch_assoc($rows)) {
    $filename = $row["ProductCode"];
    $red = $row["Red"];
    $green = $row["Green"];
    $blue = $row["Blue"];
}

$command = $command."-o ".$filename." -F JPEG -x 1 -f 1";
echo json_encode(array("Command"=>$command));
$result = system($command);

这导致命令:

.\blender\blender -b _swatches.blend -o NPRKGAP -F JPEG -x 1 -f 1

它在命令窗口中正确执行,但在 php 中调用(来自 web 请求)时不能正确执行。

我在 PHP 中关闭了安全模式,并且提高了脚本可以使用的最大内存,尽管渲染的混合并不那么苛刻。

如果有人可以提供帮助,我将永远感激不尽。

4

2 回答 2

1

尝试将标志添加到搅拌机命令中。

-noaudio -nojoystick

我正在做类似的事情,除了我使用的是 python。

背景故事:当我试图让 www-data 用户启动搅拌机(你也在做什么)时,我遇到了疯狂的权限问题。我查看了 George Reith 的评论,并在 netrender 示例中看到它们让您放置 noaudio 和 nojoystick。所以我随机尝试了一下,突然 www-data 可以运行搅拌机了!

于 2014-08-20T16:20:18.000 回答
0

创建一个脚本并将以下代码放入该文件并将其另存为.py

import bpy

bpy.ops.render.render(animation=True)

和改变

$command =  ".\blender\blender -b _swatches.blend ";

$command =  ".\blender\blender -b _swatches.blend " + "Directory\script.py";
于 2020-06-03T17:37:09.897 回答