[PHP-users 11463] cURLでのファイルアップロード
SEGAMI Takashi
php-users@php.gr.jp
Wed, 13 Nov 2002 19:17:01 +0900
瀬上です。
動作環境:PHP 4.2.2 / Win 2K / Apache 1.3.27
cURLを使って、サーバから別のWebサーバへファイルのアップロードをしようと
試みました。つぎのようなサンプルを使って、なんとかアップロードは出来たの
ですが、期待する$_FILES['upfile']変数が存在せず、文字化けした
$_FILES['upfile.????']変数として存在します。これはなぜでしょう?
使用方法が間違っているのかと思い、試しに、CURLOPT_POSTFIELDSに渡す
連想配列のキー名に"upfile[]"とすると、
$posts = array(
"user" => "userA",
"upfile[]" => "@".$fname,
// ^^
);
文字化けは起こらなくなるのですが、受け取った$_FILES['upfile']の中身が
やはり期待する内容と違います。$_FILES['upfile']変数をprint_rすると、
以下のような感じになります。
Array (
[0] => c:/data/data1.zip
[1] => text/plain
[tmp_name] => c:\winnt\php2ff6.tmp
[error] => 0
[size] = 1534
)
これは、cURLのバグでしょうか? それともPHPのバグでしょうか?
あるいは記述にミスがあるのでしょうか?
===================================================================
--- foo.php
<?php
$url = "http://www2.foo.com/upload.php";
$fname = "c:/data/data1.zip";
$posts = array(
"user" => "userA",
"upfile" => "@".$fname,
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $posts);
ob_start();
curl_exec($ch);
$result = ob_get_contents();
ob_end_clean();
curl_close($ch);
print $result;
?>
--- upload.php
<?php
include_once("config.php");
$user = $_POST['user'];
$spooldir = STOCKDIR."/".$user;
if (!is_dir($spooldir)) @mkdir($spooldir, 0700);
print_r($_FILES);
foreach ($_FILES as $key => $val) {
$tmpfile = $val['tmp_name'];
$orgfile = $spooldir."/".basename($val['name']);
echo $orgfile;
if (copy($tmpfile, $orgfile)) {
echo "-> Copy successful";
echo " (size=".filesize($orgfile)." bytes)";
}
else {
echo "-> Copy failure !!";
}
}
/* DEBUGとして */
ob_start();
phpinfo();
$buff = ob_get_contents();
ob_end_clean();
$fp = fopen("c:/temp/phpinfo.htm","w");
fwrite($fp, $buff);
fclose($fp);
?>
/*
* 瀬上 孝司 / SEGAMI Takashi <sage@tokyo.microcad.co.jp>
* 株式会社マイクロ・シー・エー・デー 第2システム開発室
*/