0

フォームを使用せずにソースリンクからファイルをアップロードする方法はありますか?配列に3つのファイル名のリンクが含まれているとします。

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

次に、これら3つのファイルをWebサーバーにアップロードします。PHPを使用してそれを行うにはどうすればよいですか?

編集:

実際、私は現在、管理者が画像付きのイベント情報をアップロードする必要があるWebサイト(http://eventconnectbd.com/)で作業しています。100個の画像リンクを含むcsvファイルが作成されました(すべてのリンクは管理者のPCに関連しています)。だから基本的に私はそれらの画像リンクの配列を作成し、1つずつアップロードしたいと思います。

4

4 に答える 4

1

いいえ、これは不可能です。

クライアントパスしかわからない場合、Webサーバーはクライアントファイルシステムを参照する必要がありますが、もちろんそれは許可されていません。想像してみてください。許可されていれば、インターネット上のすべてのサーバーがすべてのファイルを読み取ることができますが、これは実際には望ましくありません。

于 2012-11-09T13:12:10.077 に答える
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

いいえ、できません。サーバーは、良くも悪くも(実際にはもっと良い)、クライアントのハードディスクの内容にアクセスできませ。このようなアクセスを取得できるブラウザプラグイン(たとえば、Javaアプレット)を作成する必要があります。

または、画像をまとめてアップロードする必要があります。それらをzipして、サーバーが再度分解できる単一のzipファイルをアップロードするか、アップロードする多数のファイルを一度に選択できるプラグインを再度使用します(Flashはここで人気があります)。

于 2012-11-09T17:27:45.227 に答える
0

確かにそれは可能です。あなたがしなければならないのは2つの部分を実装することです:

  1. 単一のphpスクリプトで実装されたサーバー側の単純なAPI。ファイルを受け取り、どこかに保存します。セキュリティや妥当性のチェックを追加したいと思うかもしれませんが、それは別の話です。
  2. 配列を繰り返し、APIを使用して各ファイルを1つずつアップロードするクライアント側の小さなスクリプト。

これで、フォームは不要で、単一のオブジェクトを手動でアップロードする必要もありません。


要求に応じて、簡単な例を追加します。アイデアを示すためだけに、特別なことは何もありません。

サーバーサイド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スクリプトを作成しましたが、クライアント側で使用できる任意の言語を使用できます。単一のファイルのみをアップロードしますが、明らかにこれは、ファイルのリストなどを処理するループで実行できます。

#!/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 に答える