2011-10-22 76 views
0

我有一台运行ubuntu 10.10的linux服务器,在安装了apache和php的maverick中,在/ var/www目录中有一个下载目录。我已经使用OSFile经理和修改,以包括一个函数来这里分割文件是代码:在Linux服务器上执行PHP exec split命令

function spl($fname){ 
global $folder; 
if (!$fname == ""){ 
    maintop("Split"); 
    $dirfile = $folder.$fname; 

    \\escape directory path 
    $dirfile = str_replace(" ","\ ",$dirfile); 
    $dirfile = str_replace("(","\(",$dirfile); 
    $dirfile = str_replace(")","\)",$dirfile); 
    $command = "split -d -b1024m ".$dirfile." ".$fname."_"; 
    echo "Command: ".$command; 
    echo"<br />"; 


    $returnval =0; 
    unset($output2); 
    $output = exec($command,$output2,$returnval); 

    //echo results 
    echo($output); 
    echo"<br />"; 
    print_r($output2); 
    echo"<br />"; 
    echo($returnval); 
    echo"<br />"; 
    mainbottom(); 
} 
    else 
    home(); 
} 

该命令不执行。文件和目录是正确的,但它返回退出代码1,并且Array()作为输出值,我创建了一个包含几个用户的组,我已经使该组成为下载的所有者/并且让它读取写入并执行权限,这个组包括www-data。

任何帮助将apreciated

+0

提示1:使用'addcslashes'或'escapeshellarg'。提示2:如果不捕获任何错误消息,请查看'error.log'。 – mario

+0

error.log位于何处?我试过escapeshellarg,但它没有对文件路径做任何事情。 –

+0

这是一个网络服务器文件。经常在文根上面。如果需要,Escapeshellarg可以在单引号和反斜线之间添加单引号。 – mario

回答

0

如果你没有得到从EXEC和任何错误信息error.log保持为空,然后使用此包装器执行:

exec("sh -c \" $cmd 2>&1 \""); 

2>&1stderr通道重定向到stdout,以便它显示在结果数组中。
In the shell, what does " 2>&1 " mean?

另一种选择是proc_open在那里你可以分别读取每个通道,但更多的工作来设置。

0

试试这个文件分割类

Split and merge files

或本使用EXEC Split big files using PHP using exec

+0

嗨,我正在寻找你已经链接的类,会让你知道它是否有效。我是在这个问题上,我正确执行命令(我已经测试了它的外壳),但它不工作k通过PHP –