0

wget を使用してリモート ファイルをサーバーにダウンロードする小さなリモート ダウンロード スクリプトを作成しました。これがどのように機能するかです: ユーザーが必要に応じて認証するために、URL、宛先ファイル名、およびオプションでユーザー名とパスワードを入力できる html フォームがあります。フォームは AJAX を使用して php スクリプトを呼び出し、php スクリプトは情報をシェル スクリプトに渡します。問題は、ローカルの Linux マシンではシェル スクリプトが問題なく動作することですが、サーバーでは認証では動作しません (認証なしでは正常に動作します)。

#!/bin/bash

if test $# -eq 2
then
    wget -O "$2" $1
elif test $# -eq 4
then
    wget -O "$2" --http-user="$3" --http-password="$4" $1
else
    wget $1
fi

言及する価値があるかもしれませんが、私は共有サーバーを所有しています。

ありがとう

EDIT:サーバーにインストールされているwgetのバージョンがhttp認証をサポートしていない可能性はありますか???

編集 2: wget の出力を次のようなファイルにパイプしました。

wget -O "$2" --http-user="$3" --http-password="$4" $1 | echo >> output

しかし、出力は空です。つまり、wget からメッセージが出力されていません!!! そして、渡された資格情報が問題ないかどうかを確認するために、これも行いました。

echo "$3 | $4" >> credentials

そして、それは大丈夫でした。

これは、シェル スクリプトを実行する php コードです。

if(isset($_POST["startdownload"]))
{
    list($url, $dest, $user, $pass) = explode("|", urldecode($_POST["data"]));
    $filelen = file_len($url);
    $freespace = getRemainingSpace();
    //die( "( Free: $freespace, File: $filelen )" );
    if($filelen > $freespace - 10000)
    {
        $result = json_encode(array("error" => true, 
                        "message" => "There is not enough space to download this file. ( Free: $freespace, File: $filelen )"));
        die($result);
    }
    else
    {
            if($user != "NULL" && $pass != "NULL")
            {
                execInBackground("../dl.sh '{$url}' '../{$dest}' '{$user}' '{$pass}'| at now");
            }
            else
            {
        execInBackground("../dl.sh '{$url}' '../{$dest}' | at now");    
            }
            $result = json_encode(array("error" => false, "message" => "Starting download..."));
            die($result);
    }
}
function execInBackground($cmd) 
{
    if (substr(php_uname(), 0, 7) == "Windows"){
        pclose(popen("start /B ". $cmd, "r")); 
    }
    else {
        exec($cmd . " > /dev/null &");  
    }
} 
4

1 に答える 1

0

まあ、このスクリプトを system/exec/shell_exec などを介して実行すると、PHP スクリプトの残りの部分が「ブロック」される可能性があります。しかし、答えとして、これをチェックしてください: http://www.zarafa.com/wiki/index.php/Using_wget_and_HTTP_authentication_for_supported_downloads

wget -O "$2" --user="$3" --ask-password="$4" $1
于 2013-05-15T11:38:07.190 に答える