上传不会产生任何结果

时间:2012-09-22 02:40:43

标签: php file-upload

我已将此脚本用于上传远程文件但该文件未上传到服务器且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;
    }
}

我检查了错误日志但没有任何结果。我在哪里做错了?

2 个答案:

答案 0 :(得分:1)

阅读PHP File Uploads

尝试此操作来调试脚本:

var_dump($_FILES);

你看到了吗?

编辑:好的,我看到你更明确地定义了“远程文件”。您必须使用“文本”输入来接收URL。你是如何绕过标准文件选择对话框的?

如果您只是将<input/>类型更改为“text”,您的代码看起来就会正常工作。

编辑2:我注意到您已将帖子更新为<input type="text"/>,因此您已经有一个URL可以通过您的脚本。检查您的主机是否已启用allow_url_fopen。否则,fopen()将无法检索您的网址。您将不得不使用cURL

编辑3:您的copy1_file函数是否真的永远不会返回uri?该函数中的代码中存在许多错误。例如:copy1_file正在接收网址,为什么顶部有$file['name']?然后直接引用$_POST?还有更多错误。仔细检查并更正它们,然后它应该正常工作,因为你知道fopen(url)已知与你的主人合作。

答案 1 :(得分:0)

您需要使用$_FILES数组来访问上传的文件,而不是$_POST

这是处理文件上传的示例代码:

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

<强>更新

如果您只需要通过网址上传文件,那么您不需要<input type="file">,只需使用简单的<input type="text">,在用户插入网址和提交后,您就可以使用file_get_contentsfile_put_contents函数:

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

能够使用这些函数下载远程文件,确保PHP的allow_url_fopen选项设置为TRUE