我在一个RedHat服务器上,有一个简单的PHP页面,它有一个表单,输入姓名、电话和url。
提交表单时,我运行一个命令来使用mxmlc编译swf。命令是这样的:
$generate_command1 = "export _JAVA_OPTIONS='"-Xms32m -Xmx64m'"; /opt/flex/bin/mxmlc -define+=NAMES::Name,'"''$name'''" -define+=NAMES::Phone,'"''$phone'''" -define+=NAMES::Website,'"''$url'''" -output /path/to/my/webserver/httpdocs/swfbuilder/generated.swf DynamicTextTest.as";
$last_line = exec($generate_command1, $out);
print_r($last_line);
结果总是:
Loading configuration file /opt/flex/frameworks/flex-config.xml
当我从ssh运行相同的命令到服务器时,我实际上得到一个生成的swf。例如
Picked up _JAVA_OPTIONS: -Xms32m -Xmx64m
Loading configuration file /opt/flex/frameworks/flex-config.xml
/var/www/vhosts/tag.domandtom.com/httpdocs/swfbuilder/generated.swf (945 bytes)
[root@htmlfive swfbuilder]#
目录和文件都被CHOWN'd为所有权,CHMOD'd为775…所以我做错了什么让这个工作从网页?我是否应该有一个分支进程并等待它完成?睡眠?
编辑:我已经研究了fsh和其他mxmlc/java相关的问题
在重新检查代码时,我注意到我不应该转义单引号。它们在实际执行中是有效的,在这个例子中,我应该只对php的双引号进行转义…
最终代码看起来像这样(供将来参考):
<?php
$name = "generated";
$phone = "";
$url = "";
if(isset($_POST['name'])) {
$name = $_POST['name'];
}
if(isset($_POST['phone'])) {
$phone = $_POST['phone'];
}
if(isset($_POST['url'])) {
$url = $_POST['url'];
}
$swfname = $name . ".swf";
$generate_command1 = "export _JAVA_OPTIONS='"-Xms32m -Xmx64m'"; /opt/flex/bin/mxmlc -define+=NAMES::Name,'"'$name''" -define+=NAMES::Phone,'"'$phone''" -define+=NAMES::Website,'"'$url''" -output /path/to/my/webserver/httpdocs/swfbuilder/$swfname DynamicTextTest.as";
exec($generate_command1, $out);
?>