我已将此脚本用于上传远程文件但该文件未上传到服务器且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;
}
}
我检查了错误日志但没有任何结果。我在哪里做错了?
答案 0 :(得分:1)
尝试此操作来调试脚本:
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_contents和file_put_contents函数:
file_put_contents($pathToSavePath, file_get_contents($_POST['song']));
能够使用这些函数下载远程文件,确保PHP的allow_url_fopen
选项设置为TRUE