PHP文件上传(通过卷曲在命令行上)
我使用PHP将文件上传到我的服务器,却有着一个噩梦使用这种简单的HTML表单时,它似乎工作:PHP文件上传(通过卷曲在命令行上)
<html><body>
<form enctype="multipart/form-data" action="uploads.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
Choose a file to upload: <input name="uploadedfile" type="file" /><br />
<input type="submit" value="Upload File" />
</form>
的PHP则是:
<?php
$target_path = "uploads/";
$target_path = $target_path . basename($_FILES['uploadedfile']['name']);
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
echo "The file ". basename($_FILES['uploadedfile']['name']).
" has been uploaded";
} else{
echo "There was an error uploading the file, please try again!";
}
?>
是否有通过使用curl命令行或shell脚本这种技术来发送文件的任何可能的方式?即东西沿着线:
curl -f "@/path/to/my/file;type=text/html" http://mywebserver.com/uploads.php
这一特定线路上给了我:“卷曲:(22)无法连接到:: 1:权限被拒绝”虽然有在网站上没有密码等等。我认为这是可能的,但我得到的语法错了?
我想你想要的参数是一个资本F
(对于窗体)。小写f
表示失败,并返回错误代码22.严重的是,它在手册中!
-f,--fail
(HTTP)默默地失效服务器上的错误(没有输出)。这是 主要是为了更好地启用脚本等,以更好地处理尝试失败的 。在正常情况下,当HTTP服务器未能发送一个 文档时,它会返回一个HTML文档来说明这一点(通常也会为 描述原因以及更多)。此标志将防止卷曲从输出 这一点,返回错误22
这种方法是不是故障安全和有场合 非成功响应代码将漏网之鱼,尤其是当 认证涉及(响应代码401和407)。
-F,--form
(HTTP)这允许卷曲模拟填充的形式,其中用户已经 按下提交按钮。这会导致根据RFC 2388使用 Content-Type multipart/form-data卷曲POST数据。这使得 上传二进制文件等。要强制将“content”部分设置为 文件,请在文件名前加上@ 标志。要从文件中获取内容 零件,请在文件名前加上符号<。 @和<之间的差别在于@使得文件作为文件上载被附加在文章 中,而<使文本字段成为 从文件获得该文本字段的内容。
此外,您还没有命名您的文件变量。我想你想:
curl -F "[email protected]/path/to/my/file" http://mywebserver.com/uploads.php
示例:http://ariejan.net/2010/06/07/uploading-files-with-curl/ – mbarlocker 2013-04-30 19:58:11
谢谢,虽然它仍然无法正常工作。(这次PHP返回:“上传文件时出现错误”,我认为我今天注定是-f失败 – BSUK 2013-04-30 20:03:55
我已经添加了一些关于命名文件变量的信息 – 2013-04-30 20:08:31
您还应该设置通过'-X“POST'' – fardjad 2013-04-30 19:49:17
这个剧本非常小心地,因为它上传任何类型的文件,是一个安全漏洞发布方法(脚本可能直接上传到你的服务器,然后使用浏览器执行)...所以需要额外的编码保护! – 2014-03-20 07:56:08