有没有办法在不使用表单的情况下从源链接上传文件?假设一个数组包含3个文件名的链接。
$array = array('C:\test\a.jpg', 'C:\test\b.doc', 'C:\test\c.txt');
现在我想在Web服务器上传这3个文件。我怎么能用PHP做到这一点?
修改
实际上我目前正在一个网站(http://eventconnectbd.com/)上工作,管理员必须上传带有图片的活动信息。已创建一个包含100个图像链接的csv文件(所有链接都与管理员的pc相关)。所以基本上我创建了一个这些图像链接的数组,并希望逐个上传。
答案 0 :(得分:1)
不,这是不可能的。
如果您只知道客户端路径,那么您的Web服务器需要浏览客户端文件系统,当然,这是不允许的。想象一下:如果它被允许,互联网上的每个服务器都可以读取你的所有文件,这是不可取的。
答案 1 :(得分:1)
<?php
$array = array('/var/www/a.jpg', '/var/www/b.jpg', '/var/www/c.jpg');
$dest_path = '/var/www/myweb/';
foreach($array as $file_path){
$file_name = end(explode('/', $file_path));
copy($file_path, $dest_path . $file_name);
}
?>
答案 2 :(得分:1)
不,这是不可能的。无论好坏,服务器都无法访问客户端的硬盘内容(更好,真的如此)。您必须编写一个可以获得此类访问权限的浏览器插件(例如,Java小程序)。
或者,您必须批量上传图片。将它们压缩并上传一个服务器可以再次拆分的zip文件,或再次使用一个插件,它允许您一次选择多个文件进行上传(Flash很受欢迎)。
答案 3 :(得分:0)
当然这是可能的。 您所要做的就是实现两个部分:
这就是全部,不需要任何表格,也不需要手动上传单个对象。
根据要求,我添加了一个简短的例子。没什么好看的,只是为了表明这个想法:
服务器端API,这里名为upload.php
的原始php脚本:
<?php
// this is where uploaded files get dumped to
define('FILES_STORAGE','/some/path/writeable/for/http-server');
// $_FILES holds the meta data of the uploaded file as stored temporarily
syslog(LOG_DEBUG,sprintf("upload API accepted file '%s'",$_FILES['filedata']['name']));
// copy file to its final destination (temp file gets removed automatically)
copy ( $_FILES['filedata']['tmp_name'] , FILES_STORAGE.$_FILES['filedata']['name']);
// some feedback to the client, might be ignored
echo sprintf("file '%s' accepted and stored. ", $_FILES['filedata']['tmp_name']);
?>
客户端脚本,我制作了一个简单的bash脚本,尽管你可以使用你想要的任何语言或客户端可用的语言。它只上传一个singel文件,但显然这可以在处理文件列表或其他任何内容的循环中完成:
#!/bin/bash
curl -i -F name=test -F filedata=@test.png http://api.myserver.org/upload.php
执行脚本时,文件会上传并移动到API文件顶部定义的文件夹FILES_STORAGE
。没有错误,安全性和合理性检查,因为这是一个概念证明。