【问题标题】:python not correctly uploading to phppython没有正确上传到php
【发布时间】:2011-02-02 12:54:33
【问题描述】:

我有一个使用 mechanize 将图像上传到 php 脚本的 python 脚本。问题是图像是 3,000kb,但服务器上只显示了 52kb。

这是 Python:

from mechanize import Browser
br = Browser()
br.open("http://www.mattyc.com/up")
br.select_form(name="upper")
br.form.add_file(open("tester.jpg"), 'image/jpeg', "tester.jpg")
br.submit()

这是网页:

<?php
if (move_uploaded_file($_FILES['file']['tmp_name'], $_FILES["file"]["name"])) {
    $success_msg = "GOOD";
    echo $success_msg;
}else{
echo "ERROR";
}


?>
<html>
<head>
<title>UP</title>
</head>
<body>
<form action="up.php" method="post" enctype="multipart/form-data" name="upper" >
<label for="file">Filename:</label>
<input type="file" name="file" id="file" /> 
<br />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>

【问题讨论】:

  • 您能否将 $_REQUEST、$_GET、$_FILES 和 $_POST 的输出发布到您的 PHP 脚本中?

标签: php python html mechanize


【解决方案1】:

很可能是 PHP ini 设置限制了文件上传大小 (upload_max_filesize)。

编辑:要检查此设置,您可以使用:echo ini_get('upload_max_filesize');。如果里面的大小是 52KB,那么你就有答案了。实际上,如果它小于您要上传的文件的大小,请提高它,因为这肯定会成为一个问题。

【讨论】:

  • 它打印了 8M。所以我猜那不是问题?
  • 显然不是来自 PHP 内部,但在那一端(Apache/etc)仍然可能会中断一些事情。继续接受@schneck 的建议,并从超全局变量的输出中发布更多信息。 $_FILES 可能有最相关的信息。
  • 我该怎么做。我有点新。
  • 阅读the doc 是个好主意。注意:该链接跳转到一个注释,该注释在转储时演示 $_FILES 的格式。 [size] 和 [error] 的子索引可能具有特殊价值(您希望得到 UPLOAD_ERR_OK)。
  • 当我通过真正的浏览器访问脚本时,php 似乎很好,上传工作很好,所以我猜它是 python 部分
【解决方案2】:

解决方案是以二进制打开文件,而不是以纯文本模式打开。在您的 python 代码中,将相关行替换为:

br.form.add_file(open("tester.jpg" ,"rb"), 'image/jpeg', "tester.jpg")

简单地添加"rb" 标志(读取二进制)将解决您的问题。 filsize 被缩小是因为它试图正常读取文件,并且只上传了 ascii 纯文本范围内的字符。

享受吧。

【讨论】:

    猜你喜欢
    • 2015-04-22
    • 2018-07-28
    • 1970-01-01
    • 2012-10-24
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    • 1970-01-01
    相关资源
    最近更新 更多