4

数時間の調査の後、PHP と cURL の問題を解決できませんでした。

フォームから直接ファイルを送信しようとすると、カールは正常に機能します。

<form method="post" action="" enctype="multipart/form-data">
<input name="file" type="file" /> <br />
<input name="submit" type="submit" value="Upload" />
</form>

<?php
$temp = $_FILES['file']['tmp_name'];
$name = $_FILES['file']['name'];

$post = array (
    'file' => '@'. $temp
);

$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt ($ch, CURLOPT_POST, true);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $post);
$exec = curl_exec ($ch);
curl_close ($ch);
?>

上記のコードは正常に動作しています。フォームを使用しようとすると、ファイルが正しく送信されます。

私の問題は、既にサーバー上にあるファイルを送信する必要があることです。

ファイル「C:/xampp/htdocs/test/photos.zip」へのフルパスで試しましたが、何らかの理由で機能しません。

$post = array (
    'file' => '@C:/xampp/htdocs/test/photos.zip'
);

既にサーバーに送信されたファイルを送信する方法を知っている人はいますか?

編集:

upload.php (サーバー)

<?php
error_reporting( E_ALL );
$upload = $_FILES['file'];
move_uploaded_file( $upload['tmp_name'], 'photos.zip');
?>

myuploadtest.php (ローカルホスト)

<form action="" method="post" enctype="multipart/form-data">
<input name="file" type="file" /><br />
<input name="submit" type="submit" value="Upload" />
</form>

<?php
$temp = $_FILES['file']['tmp_name'];
$name = $_FILES['file']['name'];

$post = array(
    'file' => '@'.$temp
);

$url = "http://www.mysite.com/upload.php";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$exec = curl_exec($ch);
curl_close($ch);
?>

uploadcurl.php (ローカルホスト)

<?php
$post = array(
    'file' => '@C:/xampp/htdocs/test/photos.zip'
);

$url = "http://www.mysite.com/upload.php";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$exec = curl_exec($ch);
curl_close($ch);
?>

前もって感謝します。

4

2 に答える 2

1

試してみたいことがあります:

  • 相対パスを使用します。つまり、実行中の php スクリプトに関連するパス名を指定します。

  • 上記のコードでは、$url の宣言が欠落していると思います。

  • Does anyone know how I do to send files that have already been sent to the server? どのサーバーにファイルを送信していますか?という質問がよくわかりません。(ローカルホスト?)

相対パスが機能しない場合、表示されるエラー メッセージを共有していただけますか?

于 2012-06-17T14:50:47.167 に答える
1

サーバー上に既に存在するファイルを送信するには、サーバー上の完全なパスでファイルを見つけます。

$post = array(
    'file' => '@'. $_FILES['file']['tmp_name']
);

それはまさにあなたが最初にしたことです。

于 2012-12-18T09:37:29.740 に答える