PhP中proc_open的替代函数?

时间:2012-10-16 10:20:48

标签: php wkhtmltopdf

我有一个问题,我在共享托管环境中使用PHP类,调用wkhtmltopdf生成PDF文件,由于服务器攻击主机禁用proc_open和shell_Exec以及所有可能导致问题的功能(如果被攻击者使用)。在主机禁用这些功能之前,一切正常。在我使用的PHP类中,由于禁用了proc_open函数,下面的方法不再起作用。我可以使用以下方法替代确切结果吗?任何帮助高度赞赏。

private static function _pipeExec($cmd,$input=''){
                        $proc=proc_open($cmd,array(0=>array('pipe','r'),1=>array('pipe','w'),2=>array('pipe','w')),$pipes);
                        fwrite($pipes[0],$input);
                        fclose($pipes[0]);
                        $stdout=stream_get_contents($pipes[1]);
                        fclose($pipes[1]);
                        $stderr=stream_get_contents($pipes[2]);
                        fclose($pipes[2]);
                        $rtn=proc_close($proc);
                        return array(
                                        'stdout'=>$stdout,
                                        'stderr'=>$stderr,
                                        'return'=>$rtn
                                );
                }

2 个答案:

答案 0 :(得分:3)

disable_functions设置只能在php.ini本身更改,这意味着它是服务器范围的,适用于共享主机上的所有网站。

以下是您的选择:

  1. 您可以要求当前的托管服务提供商将您的网站转移到专用计算机(或VPS)。

  2. 去其他地方找一个没有这些限制的提供商;这需要一些时间,但可能是值得的。

  3. DIY。建议不要设置服务器,除非您知道自己在做什么,但如果这样做,那么任何平台托管服务提供商都会这样做;现在,您可以在亚马逊上以每月约5美元的价格运营一个小型专用网站。

  4. 最后一个选项还会为您提供“外包”PDF生成选项,以便您网站的其余部分仍在您当前的主机上运行。

答案 1 :(得分:-4)

尝试使用后退反击(``):

echo `wkhtmltopdf.exe test.html test.pdf`;

使用反引号运算符与shell_exec()相同。