2017-03-06 12 views
1

私はwebからファイルをwgetできるpersonnalプロジェクトに取り組んでいます。%0D wget with PHP

私は問題を抱えています。すべてのファイル名の最後に%0Dが付いています。ここで

は私のコードです:

のindex.php:

<!DOCTYPE html> 
<html> 
    <form action="action.php" method="post" enctype="multipart/form-data"> 
     <textarea name="directlink" class="form-control" rows="3"></textarea> 
     <button type="submit" name="send" class="btn btn-default">Send</button> 
    </form> 
</html> 

action.php:

<?php 

if (isset($_POST['directlink'])) { 
    $file = str_replace(' ', '', $_POST['directlink']); 
    $files = explode("\n", $file); 
    foreach ($files as $value) { 
    $final[] = base64_encode($value); 
    } 
$file = implode(" ", $final); 
shell_exec('sudo -u user download/wget.sh ' . 'option' . ' ' . $file); 
} 

?> 

Wget.sh:

#!/bin/bash 

/download/wget_cmd.sh "[email protected]" 2>&1 

Wget_cmd.sh:

#!/bin/bash 

for i in ${@:2} 
do 
    file=$(echo -n "${i}" | base64 --decode) 
    wget "$file" -P /download/ 2>&1 
done 
+0

さん、 'wget.sh'は' /download/wget_cmd.sh "$ @" 2>&1'であるべきです。なぜ 'wget_cmd.sh'は最初の引数を無視するのですか? – chepner

+0

完全なスクリプトではないので、私はこのオプションで何らかの処置をしています。なぜ私は2つのbashスクリプトをやっているのかわからないx)しかし、問題は同じですが、%0Dもあります – pehechpe

+0

ただ1つのスクリプトでOK、私はWebページで待つ必要があります。私はバックグラウンドで起動wgetのための2つのスクリプトが必要です。別の方法がある場合は... "$ @"のヒントをありがとう^^ – pehechpe

答えて

1

テキストエリアの生データを\nで分解します。ユーザーがWindowsを使用している場合は、\rになります。あなたはおそらくpreg_split代わりにしたい:

$files = preg_split('/[\r\n]+/', $file); 

...多分トリム各ファイル:

foreach ($files as $value) { 
    $final[] = base64_encode(trim($value)); 
} 

P.S.をPHPはHTTPをうまくやることができます。実際には外部コマンドは必要ありません。