-3

サーバーにファイルをリモートアップロードするためのスクリプトを作成していました。ここにコードがあります。ところで、私はサイトからそれを取りました。サイト名を投稿しなかったか、スパムか何かと見なされる可能性があります。リモートファイルをサーバーにダウンロードすることについてです。

<?php

if (isset($_POST['myupload']))    
{

    $links_list = $_POST['upload'];
    $incr = 0;
    $links = explode("\r\n",$links_list);

    define('BUFSIZ', 4095);

    for ( $incr == 0 ; $incr < count($links) ; $incr++ )
    {
        $url = $links[$incr];
        $rfile = fopen($url, 'r');
        $lfile = fopen(basename($url), 'wb');
        while(!feof($rfile))
            fwrite($lfile, fread($rfile, BUFSIZ), BUFSIZ);
        fclose($rfile);
        fclose($lfile);
    }
}
?> 

    <script type="text/javascript"></script>
</head>    
<body>
    <div id="upload_box">
        <form action="" method="post">   
            <textarea name="upload" cols=80 rows=20></textarea>
            <input type="submit" name="myupload" value="Upload Files">
        </form>

このスクリプトについていくつかお聞きしたいことがあります。

  • $lfile = fopen(basename($url), 'wb')< このコードは何をしますか?

  • fwrite($lfile, fread($rfile, BUFSIZ), BUFSIZ);< そして、このコードはどうですか?

ばかげた質問をしていることは承知していますが、皆さんが私のためにそれを明らかにしてくれることを願っています.

4

3 に答える 3

0
$lfile = fopen(basename($url), 'wb')

fopen: ファイルを開き、2 番目の引数 (以下で説明) に応じて、そのファイルの読み取り/書き込みに使用できるハンドルを返す関数。

basename: ファイル名からパスを取り除き、名前の部分だけを残す関数。例basename('http://foo.com/bar.txt'):bar.txt

'wb': これは、ファイルを開く方法を fopen に指示します:w書き込み用にb開くことを意味し、バイナリ アクセス用に開くことを意味します。これは、ファンキーな行末変換を行わないことを意味します (Windows でのみ実際に役立ちます)。

$lfile: これは、後で書き込むために使用されるファイルへのハンドルです。

fwrite($lfile, fread($rfile, BUFSIZ), BUFSIZ);

fwrite: 以前に開いたファイル ハンドルにデータを書き込みます ($lfileこの場合)。

fread: ファイルからデータを読み取ります。

BUFSIZ: これは、どこかで定義された定数であると想定しています。とにかく、 の 3 番目のパラメーター fwriteはファイルに書き込むバイト数を指定し、 の 2 番目のパラメーターはfread読み取るバイト数を指定します。この場合、どちらも同じです。

この種の操作は、バッファ コピーまたはブロック コピーと呼ばれることがあります。

分解すると、次のようになります。

$data = fread($rfile, BUFSIZ);
fwrite($lfile, $data, BUFSIZ);

それが役立つことを願っています!

于 2013-07-08T06:22:53.453 に答える
0
1st > $lfile = fopen(basename($url), 'wb') < what does this code do ?

この行は $url を開き、その URL のハンドルを返します。

Basename()

ファイルまたはディレクトリへのパスを含む文字列を指定すると、この関数は末尾の名前コンポーネントを返します。

 2nd > fwrite($lfile, fread($rfile, BUFSIZ), BUFSIZ); < and what about this code ?

これにより、ストリーム$lfileの内容がストリームに書き込まれ$rfile、読み取り/書き込みのサイズは4095で定義されますdefine('BUFSIZ', 4095);

この部分を見てください

while(!feof($rfile))
  fwrite($lfile, fread($rfile, BUFSIZ), BUFSIZ);

この部分は、文字「ファイルの終わり」関数まで、BUFSIZfeof()で定義された部分のデータを読み取ります。

したがって、コードはフォームに投稿されたリンクをダウンロードします。それがすべてです。

于 2013-07-08T06:23:30.737 に答える
0

$lfile = fopen(basename($url), 'wb')

提供された URL の最後のセグメント (通常はファイル名) を使用してバイナリ ファイルを書き込むためのファイル ポインターを作成し、そのファイル ポインター/ハンドラーを $lfile という名前の変数に返します。

fwrite($lfile, fread($rfile, BUFSIZ), BUFSIZ);

ファイル ポインタ/ハンドラ $rfile から BUFSIZ ロング バイトを読み取り、$lfile が指すファイルに書き込まれるようにプッシュします。バイト数の BUFSIZ も書き込みます

于 2013-07-08T06:24:14.090 に答える