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 文件上传

试试这个来调试你的脚本:

var_dump($_FILES);

你看到什么了吗?

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

如果您只是将<input/>类型更改为“文本”,您的代码将按原样运行。

编辑 2:我注意到你更新了你的帖子,<input type="text"/>所以你已经有一个 URL 可以通过你的脚本。检查您的主机是否启用了allow_url_fopen。否则,您的 URL 将不会被fopen(). 您将不得不cURL改用。

编辑 3:可能是您的copy1_file函数从未真正返回 uri 吗?该函数的代码中有很多错误。例如:copy1_file正在接收一个 url,为什么它$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">,只需使用简单的<input type="text">,在用户插入 URL 并提交后,您可以使用file_get_contentsfile_put_contents函数:

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

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

于 2012-09-22T02:45:20.937 回答