ファイルをリモートサーバーにアップロードするための非常に単純なPHPコードがありました。私がそれをやっていた方法(ここでいくつかの他の解決策で提案されているように)は、ファイルをアップロードするためにcUrlを使用することです。誰でも私にPHPのCURLFileクラスの例を教えてもらえますか?
はここに私のコードです:
$ch = curl_init("http://www.remotesite.com/upload.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, array('fileupload' => '@'.$_FILES['Filedata']['tmp_name']));
echo curl_exec($ch);
サーバはPHP 5.5.0で実行され、@filenameしたがってCURLOPT_POSTFIELDS
説明の下に述べhereとしてPHP> = 5.5.0で非推奨とされたことが表示されます、
Deprecated: curl_setopt(): The usage of the @filename API for file uploading is deprecated. Please use the CURLFile class instead in ...
興味深いことに、基本クラスの概要は別にphp.net上でこのクラスについて全く何もありません:私はこのエラーを取得しています。例も、メソッドやプロパティの説明もありません。基本的には空白のhereです。ドキュメントがほとんどなくても実際の使用がほとんどないまったく新しいクラスであることはわかっています。これは、Googleでの検索やこのクラスのStackoverflowでの検索には何も関係しません。
このCURLFileクラスを使用している人がいて、私のコードに@filenameの代わりに使用することを助けてくれる人がいるかどうかは疑問です。
編集:
私も私の「upload.php」のコードを追加したいです。このコードでは、伝統的な@filename方式で動作していないだろうが、もはやCURLFileクラスのコードで働いている:
$folder = "try/";
$path = $folder . basename($_FILES['file']['tmp_name']);
if(move_uploaded_file($_FILES['file']['tmp_name'], $path)) {
echo "The file ". basename($_FILES['file']['tmp_name']). " has been uploaded";
}
最終編集:
が探して他人のために働く/最終的なコードを追加したい
ほとんど文書化されなかっCURLFileクラスの同様の作業例...curl.php(ローカルサーバー)
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
<label for="file">Filename:</label> <input type="file" name="Filedata" id="Filedata" />
<br />
<input type="submit" name="submit" value="Submit" />
</form>
<?php
if ($_POST['submit']) {
$uploadDir = "/uploads/";
$RealTitleID = $_FILES['Filedata']['name'];
$ch = curl_init("http://www.remotesite.com/upload.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$args['file'] = new CurlFile($_FILES['Filedata']['tmp_name'],'file/exgpd',$RealTitleID);
curl_setopt($ch, CURLOPT_POSTFIELDS, $args);
$result = curl_exec($ch);
}
?>
upload.php(リモートサーバ)
$folder = "try/";
$path = $folder . $_FILES['file']['name'];
if(move_uploaded_file($_FILES['file']['tmp_name'], $path)) {
echo "The file ". basename($_FILES['file']['name']). " has been uploaded";
}
var_dump($ _ FILES)できますか? upload.phpの – Danack
?私がそれをすれば、どうすればcurl.phpページの結果を返すことができますか?以前はこれをやろうとしていましたが、送信コードを実行すると実際には何も返されませんでした。 – luci5r
OK - RETURNTRANSFERをtrueに設定する必要がありました。これはupload.phpのvar_dump($ _ FILES)の結果です:array(1){["file"] => array(5){["name"] => string(11) "phpC0F4.tmp" [ ( "tmp_name")=>文字列(14) "/ tmp/phpj7C3Hv" ["エラー"] => int(0)["size"] => int(483397)}} phpj7C3Hvファイルがアップロードされました ' – luci5r