0

有什么方法可以在不使用表单的情况下从源链接上传文件?假设,一个数组包含 3 个文件名的链接。

$array = array('C:\test\a.jpg', 'C:\test\b.doc', 'C:\test\c.txt');

现在我想将这 3 个文件上传到网络服务器中。我怎样才能使用 PHP 做到这一点?

编辑:

实际上,我目前正在一个网站 (http://eventconnectbd.com/) 上工作,管理员必须在该网站上上传带有图像的事件信息。已创建一个包含 100 个图像链接的 csv 文件(所有链接都与管理员的电脑相关)。所以基本上我创建了这些图片链接的数组,并想一个一个上传。

4

4 回答 4

1

不,这是不可能的。服务器无法访问客户端的硬盘内容,无论好坏(更好,真的)。您必须编写一个可以获得此类访问权限的浏览器插件(例如,Java 小程序)。

或者,您必须批量上传图片。要么压缩它们并上传单个 zip 文件,服务器可以再次分解,要么再次使用一个插件,让您一次选择多个文件进行上传(Flash 在这里很流行)。

于 2012-11-09T17:27:45.227 回答
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);
}
?>
于 2012-11-09T15:46:22.857 回答
1

不,这是不可能的。

如果您只知道客户端路径,那么您的 Web 服务器需要浏览客户端文件系统,这当然是不允许的。想象一下:如果允许的话,互联网上的每台服务器都可以读取你所有的文件,这真的是不可取的。

于 2012-11-09T13:12:10.077 回答
0

当然这是可能的。您所要做的就是实现两个部分:

  1. 在单个 php 脚本中实现的服务器端的简单 API。它接受一个文件并将其存储在某个地方。也许您想添加一些安全性或合理性检查,但这是另一回事。
  2. 客户端的一个小脚本,它迭代数组并使用 API 一个一个地上传每个文件。

就是这样,不需要任何表格,也不需要手动上传单个对象。


根据要求,我添加了一个简短的示例。没什么花哨的,只是为了展示这个想法:

服务器端 API,这里调用的原始 php 脚本upload.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 脚本,尽管您可以使用任何您想要或在客户端可用的语言。它只上传一个文件,但显然这可以在处理文件列表或其他任何内容的循环中完成:

#!/bin/bash
curl -i -F name=test -F filedata=@test.png http://api.myserver.org/upload.php

当您执行脚本时,文件将被上传并移动到 API 文件顶部定义为FILES_STORAGE. 不进行错误、安全性和合理性检查,因为这是概念验证。

于 2012-11-09T19:29:02.527 回答