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:权限被拒绝”虽然有在网站上没有密码等等。我认为这是可能的,但我得到的语法错了?

+0

您还应该设置通过'-X“POST'' – fardjad 2013-04-30 19:49:17

+0

这个剧本非常小心地,因为它上传任何类型的文件,是一个安全漏洞发布方法(脚本可能直接上传到你的服务器,然后使用浏览器执行)...所以需要额外的编码保护! – 2014-03-20 07:56:08

我想你想要的参数是一个资本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 
+0

示例:http://ariejan.net/2010/06/07/uploading-files-with-curl/ – mbarlocker 2013-04-30 19:58:11

+1

谢谢,虽然它仍然无法正常工作。(这次PHP返回:“上传文件时出现错误”,我认为我今天注定是-f失败 – BSUK 2013-04-30 20:03:55

+0

我已经添加了一些关于命名文件变量的信息 – 2013-04-30 20:08:31