2013-03-06 29 views
0

我目前使用PHP的插件,就设在这里的Pygments来做:http://derek.simkowiak.net/pygments-for-php/PHP的exec()的Pygments来做PHP

实际上从该代码调用Pygments来做该生产线是一个exec()通过:

pygmentize -f html $extra_opts -l $language $temp_name
作为命令。这一切工作正常,我得到的输出,并由插件格式化。

我想同时发生的是Pygments创建它的图像,所以我通过exec()一个类似的命令:

pygmentize -f png $extra_opts -l $language -o $full_image_path/$output_file.png $temp_name
这是我遇到问题的地方。图像从不出现在预期的文件夹中。

但是,如果我var_dump()那个命令字符串之前我exec()它并采取它并直接从命令行运行它,它工作正常。

我试图呼应EXEC(“WHOAMI”),它告诉我,PHP用户是www数据。我试图给www-data的权限,并将存储图片的文件夹的所有权更改为www-data。我也尝试将权限更改为777,以查看会发生什么,答案是什么。

有什么我失踪了吗?我正在用尽想法尝试。谢谢!

编辑:我检查过的另一件事是exec命令的输出和返回值。它输出一个空数组,并返回1作为返回值。

编辑2:在看到该目录对于PHP用户应该是可写/可读的之后,pygments是否有权将其写入特定用户?我不确定这是否合理,因为当我自己运行它时它工作正常,事实上,当PHP使用HTML词法分析器运行它时,它能够运行。我对Python并不是很有经验,所以我不知道这是否是一个潜在的问题。

+0

尝试使用'print()'在调用exec()之前查看构造的命令字符串。这应该告诉你问题是什么。 – SDC 2013-03-06 15:48:31

+0

会做'var_dump()'会做的事情吗?我'var_dump($ command)'其中'$ command'是在调用'exec()'之前构造的命令字符串,并且我得到:'pygmentize -f png -O full,style = manni,cssclass = pygmentize_kbOKBd -l php - o /srv/www/path/to/images/uploads/2513732976ad4b7.02729290.png/tmp/pygmentize_kbOKBd'。然后我可以在命令行中自己运行它,并且它工作正常,这就是为什么它对我来说很奇怪,我认为这是一个权限问题,但即使在文件夹777上我似乎也无法修复它我正在使用它。 – 2013-03-06 15:55:54

+0

嗯,是的,'var_dump'在这里和'print'实现了相同的功能。这个想法是要确认我们正在呼叫我们认为我们打来的电话。所以,既然这很好,我想它排除了这个想法。 – SDC 2013-03-06 16:00:43

回答

0

结束了与安装由WWW-root用户使用该字体的问题。显然Pygments默认使用的是我为使用命令行运行的用户安装的。

我能够解决这个问题的方式是运行 exec("$command 2>&1", $out, $code);

额外的2>&1重定向stderr到输出为我看到的问题。

$out参数表明Pygments来做被扔在FontNotFound错误。

我改变了Pygments来做通过使用命令行中使用的字体:full,style=manni,cssclass=pygmentize_kbOKBd,font_name='DejaVu Sans Mono' -l php -o /srv/www/path/to/images/uploads/2513732976ad4b7.02729290.png /tmp/pygmentize_kbOKBd发现哪些字体我提供给我了。

要查看运行脚本的用户可以使用哪些字体,我只需在exec()命令中运行fc-list,并将其输出检查为可用字体列表。

0

我想你不能像这样做。

$output_file.png 

尝试

$file = $output_file.".png" 

和替代品在EXEC

+0

改变之后,问题仍然存在。我认为整个字符串与之前和之后生成的字符串相同。传递给命令行的exec命令生成的是: 'pygmentize -f png -O full,style = manni,cssclass = pygmentize_kbOKBd -l php -o/srv/www/path/to/images /上传/ 2513732976ad4b7.02729290.png/tmp/pygmentize_kbOKBd' – 2013-03-06 12:29:04