PHP,debian,exec与撇号名称不起作用

时间:2014-03-16 21:54:08

标签: php linux shell debian exec

我的PHP脚本有问题,我正在尝试在我的覆盆子Pi上运行一个MP3文件,运行debian。当使用其名称中没有撇号的MP3文件时,它可以正常工作。但exec命令似乎不适用于撇号。

这是我的代码:

<?php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);

if($_GET['song'] != null){
$string = iconv( 'UTF-8', 'ISO-8859-15//TRANSLIT', $_GET['song'] );
$command = "sudo sox \"/mnt/usb/musik/".$string."\" -t mp3 - channels 1 | sudo avconv -v fatal -i pipe:0 -ac 1 -vol 60 -ar 22050 -b 352k -f wav - | sudo /opt/pifm/bin/pifm - 87.5";
exec($command,$output,$error); 
echo $command;
echo $output[0];
echo $error[0];
}
?>

echp $命令输出: sudo sox“/ mnt / usb / musik / Incredibad / 101谁说我们是Wack¿.mp3”-t mp3 - 频道1 | sudo avconv -v fatal -i pipe:0 -ac 1 -vol 60 -ar 22050 -b 352k -f wav - | sudo / opt / pifm / bin / pifm - 87.5

通过ssh使用复制和粘贴,我可以毫无问题地运行。

我已经尝试使用addslashes作为文件名,我能够运行输出: sudo sox“/ mnt / usb / musik / Incredibad / 101谁说我们是Wack¿.mp3”-t mp3 - 频道1 | sudo avconv -v fatal -i pipe:0 -ac 1 -vol 60 -ar 22050 -b 352k -f wav - | sudo / opt / pifm / bin / pifm - 87.5 通过ssh也是。

但它似乎不适用于exec()命令。

我希望有人知道答案,因为我搜索了很长时间并没有找到提示,除了adslashes选项。

提前谢谢!

编辑:

<?php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);

if($_GET['song'] != null){
$string = iconv( 'UTF-8', 'ISO-8859-15//TRANSLIT', $_GET['song'] );
$command = 'sudo sox "/mnt/usb/musik/'.$string.'" -t mp3 - channels 1 | sudo avconv -v fatal -i pipe:0 -ac 1 -vol 60 -ar 22050 -b 352k -f wav - | sudo /opt/pifm/bin/pifm - 87.5';
$command = escapeshellarg($command); 
exec($command);
echo $command;
}
?>

我刚才尝试了这个并且它也不起作用,echo输出是: 'sudo sox“/ mnt / usb / musik / Incredibad / 102 Santana DVX(feat.E-40).mp3”-t mp3 - channels 1 | sudo avconv -v fatal -i pipe:0 -ac 1 -vol 60 -ar 22050 -b 352k -f wav - | sudo / opt / pifm / bin / pifm - 87.5'

开头和结尾的撇号使命令无用:(。 取消注释$ command = escapeshellarg($ command);它有效,但当然不是名字中带有撇号的歌曲。谢谢你的回答!

0 个答案:

没有答案