我目前使用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并不是很有经验,所以我不知道这是否是一个潜在的问题。
尝试使用'print()'在调用exec()之前查看构造的命令字符串。这应该告诉你问题是什么。 – SDC 2013-03-06 15:48:31
会做'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
嗯,是的,'var_dump'在这里和'print'实现了相同的功能。这个想法是要确认我们正在呼叫我们认为我们打来的电话。所以,既然这很好,我想它排除了这个想法。 – SDC 2013-03-06 16:00:43