PHP的exec()命令不接受有效的变量来执行

时间:2015-11-02 18:51:08

标签: php imagemagick

我正在使用imagemagick和php来处理一些单词。我首先将一个句子分成单词,然后为我打算通过PHP的exec()命令调用的长命令行参数准备这些单词。我仔细检查过这个论点;根据我的知识,所有字符都被正确转义,包括单引号和双引号。 exec()函数不起作用,说"The filename, directory name, or volume label syntax is incorrect"。但是当我回显$escaped variable并将回显的字符串分配给php的exec()时,它的工作没有问题。

这是回显的字符串

exec("convert -background DeepSkyBlue -fill black -font Ultima-Alt-Bold.ttf -pointsize 90 -gravity center -density 90 label:\"SALIVA \" -fill black -font Ultima-Alt-Bold.ttf -pointsize 90 -gravity center -density 90 label:\"USED \" -fill black -font Ultima-Alt-Bold.ttf -pointsize 90 -gravity center -density 90 label:\"AS! \" +append Ulti.png"); // It works 

我正在使用的代码:

$file = 'theboldfont.ttf';
$name = substr($file, 0, 4);

$s = "SALIVA USED AS!";

$words = explode(' ',$s);
$string = '';

foreach ($words as $word) 
{
    $string .= " " . '-fill black -font ' . $file . ' -pointsize 90 -gravity center -density 90 label:"' . $word . ' "';  
}

$command = 'convert -background DeepSkyBlue ' . $string . ' +append ' . $name. '.png';  

function w32escapeshellarg($s)
{ return '"' . addcslashes($s, '\\"') . '"'; }

$escaped = w32escapeshellarg($command); 
exec($escaped); // It is not working  

1 个答案:

答案 0 :(得分:1)

使用escapeshellarg来逃避字符串:

<?php
$file = 'theboldfont.ttf';
$name = substr($file, 0, 4);

$s = "SALIVA USED AS!";

$words = explode(' ', $s);
$string = '';

foreach ($words as $word) {
    $string .= ' -fill black -font ' . escapeshellarg($file) . ' -pointsize 90 -gravity center -density 90 label:' . escapeshellarg($word);
}

$command = 'convert -background DeepSkyBlue ' . $string . ' +append ' . escapeshellarg($name . '.png');

exec($command);