PHP文件上传(通过命令行上的Curl)

时间:2013-04-30 19:46:11

标签: php curl

我正在使用PHP将文件上传到我的服务器,但是当使用这个简单的HTML表单时,它似乎有效:

<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!";
}
?>

是否有任何可能的方法通过命令行或shell脚本使用curl通过此技术发送文件?也就是说:

curl -f "@/path/to/my/file;type=text/html" http://mywebserver.com/uploads.php

该特定行给了我:“curl:(22)连接到:: 1失败:权限被拒绝”虽然网站上没有密码等我认为这是可能的,但我的语法错误?

1 个答案:

答案 0 :(得分:10)

我认为您希望参数为大写F(对于Form)。小写f用于失败,并返回错误代码22.说真的,它在手册中!

  

-f, - fail

     

(HTTP)服务器错误无提示失败(根本没有输出)。这是   主要是为了更好地启用脚本等以更好地处理失败   尝试。在正常情况下,HTTP服务器无法提供   文档,它返回一个说明的HTML文档(通常也是如此)   描述了为什么以及更多)。此标志将阻止卷曲输出   那和返回错误22。

     

此方法不是故障安全的,并且有时会出现这种情况   不成功的响应代码将会漏掉,特别是在   涉及认证(响应代码401和407)。

     

-F, - form

     

(HTTP)这使curl模拟用户拥有的填充表单   按下提交按钮。这会导致curl使用   根据RFC 2388,Content-Type multipart / form-data。这样就可以了   上传二进制文件等。强制'内容'部分为   文件,用@符号作为文件名的前缀。要获得内容   部分来自文件,文件名前缀为符号&lt;。该   @和&lt;之间的差异然后是@使文件被附加   该帖子作为文件上传,而&lt;创建一个文本字段,然后得到   文件中该文本字段的内容。

另外,您还没有为文件变量命名。我想你想要:

curl -F "uploadedfile=@/path/to/my/file" http://mywebserver.com/uploads.php