我正在制作一个远程上传文件的脚本到我的服务器和这里的代码。顺便说一句,我从一个网站上拿走了它。我没有发布网站名称,或者它可能被视为垃圾邮件或其他东西。它关于将远程文件下载到我们的服务器。
<?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;那个代码怎么样?
我知道我在问一个愚蠢的问题,但希望你们能为我解释一下。
答案 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的字节数