2

リモートファイルをアップロードするためにこのスクリプトを作成しましたが、ファイルはサーバーにアップロードされず、データベースvar1は空のままです。これが私のコードです。

HTML:

<form enctype="multipart/form-data" id="form1" method="post" action="">
    <p><label>Upload songs</label>      
    <input type="text" name="song"><input type="submit" value="Submit" class="button"></p>
</form>

PHP:

$uri = copy1_file($_POST['song']);
$story['v1'] = $uri;

        $url = $_POST['song'];
    $file = fopen ($url, "rb");
    if ($file) {
        $newf = fopen ($uri, "wb");
        if ($newf) {
            while(!feof($file)) {
                fwrite($newf, fread($file, 1024 * 8 ), 1024 * 8 );
            }
        }
    }
    if ($file) {
        fclose($file);
    }
    if ($newf) {
        fclose($newf);
    }
    else {
        return false;
    }
}

エラーログを確認しましたが、何も来ていません。私はどこで間違いをしていますか?

4

2 に答える 2

1

PHP File Uploadsを読んでください。

これを試してスクリプトをデバッグしてください:

var_dump($_FILES);

何か見えますか?

編集:わかりました。「リモート ファイル」がより明確に定義されています。URL を受け取るには、「テキスト」入力を使用する必要があります。標準のファイル選択ダイアログをどのように回避しましたか?

<input/>タイプを「テキスト」に変更するだけで、コードはそのまま機能するようです。

編集 2:投稿を更新したことに気付いた<input type="text"/>ので、スクリプトに到達する URL が既にあります。ホストでallow_url_fopenが有効になっているかどうかを確認します。そうでない場合、あなたの URL は によって取得されませんfopen()cURL代わりに使用する必要があります。

編集 3:copy1_file関数が実際に uri を返さない可能性はありますか? その関数のコードには多くのエラーがあります。例: copy1_fileURL を受信して​​いますが、なぜ$file['name']上部にあるのですか? そして後で$_POST直接参照しますか?さらにエラーがあります。fopen(url)よく確認して修正すると、ホストで動作することがわかっているため、正常に動作するはずです。

于 2012-09-22T02:52:09.883 に答える
0

$_FILESアップロードされたファイルにアクセスするには、代わりに配列を使用する必要があります$_POST

ファイルのアップロードを処理するためのサンプル コードは次のとおりです。

$pathToSaveFile = '...'; // this is the file path where the uploaded file should be saved
move_uploaded_file($_FILES['song']['tmp_name'], $pathToSaveFile);

アップデート

URL でファイルをアップロードする必要があるだけの場合は必要ありません<input type="file">。単純なものを使用するだけで、ユーザーが URL を挿入して送信した後、 file_get_contentsおよびfile_put_contents関数<input type="text">を使用できます。

file_put_contents($pathToSavePath, file_get_contents($_POST['song']));

これらの関数を使用してリモート ファイルをダウンロードできるようにするにallow_url_fopenは、PHP のオプションが TRUE に設定されていることを確認してください。

于 2012-09-22T02:45:20.937 に答える