关于此脚本中使用的函数

时间:2013-07-08 06:14:46

标签: php curl

我正在制作一个远程上传文件的脚本到我的服务器和这里的代码。顺便说一句,我从一个网站上拿走了它。我没有发布网站名称,或者它可能被视为垃圾邮件或其他东西。它关于将远程文件下载到我们的服务器。

<?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')&lt;这段代码做了什么?

  • fwrite($lfile, fread($rfile, BUFSIZ), BUFSIZ);&lt;那个代码怎么样?

我知道我在问一个愚蠢的问题,但希望你们能为我解释一下。

3 个答案:

答案 0 :(得分: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:我假设这是一个在某处定义的常量。无论如何,第3个参数来 fwrite指定要写入文件的字节数,fread的第二个参数指定要读取的字节数。在这种情况下,它们都是相同的。

这种操作有时称为缓冲或块复制。

分开看起来像这样:

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

希望有所帮助!

答案 1 :(得分: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()起作用。

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

答案 2 :(得分:0)

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

使用提供的url的最后一段(通常是文件名)创建一个写二进制文件的文件指针,并将文件指针/处理程序返回给名为$ lfile的变量

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

从文件指针/处理程序$ rfile读取BUFSIZ长字节,然后推送到$ lfile指向的文件。写入也是BUFSIZ的字节数