通过exec()运行PhantomJS - 包含〜/ .fonts的问题

时间:2016-08-13 11:57:57

标签: php linux apache phantomjs exec

我可以从shell和exec()运行PhantomJS。我正在使用的服务器在~/.fonts/目录中查找其他字体。当存在这些附加字体时,仅来自shell 我可以使用PhantomJS截取屏幕截图并且预期的字体可以很好地呈现。

> strace ~/public_html/api/libraries/phantomjs-2.1.1-linux-x86_64/bin/phantomjs ~/public_html/api/libraries/phantomjs-2.1.1-linux-x86_64/examples/rasterize.js http://v1.jontangerine.com/silo/typography/web-fonts/ ~/tmp/test.jpg | grep font
  

打开(" /home/user1/.fonts/TTF/verdana.ttf",O_RDONLY)= 11
  打开(" /home/user1/.fonts/TTF/AndaleMo.TTF",O_RDONLY)= 11   打开(" /home/user1/.fonts/TTF/arial.ttf",O_RDONLY)= 11
  打开(" /home/user1/.fonts/TTF/cour.ttf",O_RDONLY)= 11
  打开(" /home/user1/.fonts/TTF/georgia.ttf",O_RDONLY)= 11
  打开(" /home/user1/.fonts/TTF/impact.ttf",O_RDONLY)= 11
  ...

当我从exec()尝试相同的命令时,不会搜索用户字体目录。

<?php
exec('strace ~/public_html/api/libraries/phantomjs-2.1.1-linux-x86_64/bin/phantomjs ~/public_html/api/libraries/phantomjs-2.1.1-linux-x86_64/examples/rasterize.js http://v1.jontangerine.com/silo/typography/web-fonts/ ~/tmp/test.jpg | grep font');

不会搜索~/.fonts目录,但会在没有正确呈现字体的情况下将屏幕截图写入磁盘。

我理解exec()以Apache用户身份运行,因此不会使用用户字体。但是,

> whoami
  

用户1

<?php
echo exec('whoami');
  

用户1

两者都显示为同一个用户,因此我怀疑这是误导性的,因为它在shell中完美运行(字体和全部):

php -r "exec('~/public_html/api/libraries/phantomjs-2.1.1-linux-x86_64/bin/phantomjs ~/public_html/api/libraries/phantomjs-2.1.1-linux-x86_64/examples/rasterize.js http://v1.jontangerine.com/silo/typography/web-fonts/ ~/tmp/test.jpg');"

我理解setuid可以允许用户使用其所有者(user1)的权限执行程序,但这并没有帮助。此特定服务器是共享服务器,susudo已禁用,因此不允许以其他用户身份运行。

Linux用户配置不是我的专业领域,但是使用exec()如何运行PhantomJS命令以便包含用户字体?

研究:

0 个答案:

没有答案