-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:打开文件并返回可用于读取/写入该文件的句柄的函数,具体取决于第二个参数(如下所述)。

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:我假设这是在某处定义的常量。无论如何,第三个参数 fwrite指定要写入文件的字节数,第二个参数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);

这部分将读取BUFSIZ定义的部分中的数据,直到字符“文件结束”feof()函数。

因此,您的代码将下载以表单形式发布的链接。这就是它所做的一切。

于 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 回答