接收通过CURL发送的二进制文件

时间:2016-06-22 06:10:43

标签: php linux file curl

我想要做的是保存通过CURL从另一台服务器发送的二进制文件。

我的php上传器是:

<?php
define("UPLOAD_DIR", "/tmp/");

if (!empty($_FILES["myFile"])) {
    $myFile = $_FILES["myFile"];

    if ($myFile["error"] !== UPLOAD_ERR_OK) {
        echo "<p>An error occurred.</p>";
        exit;
    }

    // ensure a safe filename
    $name = preg_replace("/[^A-Z0-9._-]/i", "_", $myFile["name"]);

    // don't overwrite an existing file
    $i = 0;
    $parts = pathinfo($name);
    while (file_exists(UPLOAD_DIR . $name)) {
        $i++;
        $name = $parts["filename"] . "-" . $i . "." . $parts["extension"];
    }

    // preserve file from temporary directory
    $success = move_uploaded_file($myFile["tmp_name"],
        UPLOAD_DIR . $name);
    if (!$success) { 
        echo "<p>Unable to save file.</p>";
        exit;
    }

    // set proper permissions on the new file
    chmod(UPLOAD_DIR . $name, 0644);
}

所以我在我的网站上有这个:

example.com/uploader.php

在服务器编号2上,我运行命令:

curl --request POST  --data-binary "@binary.jpg"  http://example.com/uploader.php

然后我在/ tmp /文件夹中查找名为binary.jpg的文件,但它不在那里,这里有什么问题?

感谢。

2 个答案:

答案 0 :(得分:0)

它可能在您运行curl命令的位置。例如,如果你在/ home / student然后运行二进制文件。 Jpg位于/ home / student / binary。 JPG 运行curl命令后,您是否获得成功传输消息?

答案 1 :(得分:0)

在代码if (!empty($_FILES["myFile"])) {中,您具体检查数组myFile中名为$_FILES的字段,然后执行操作。虽然curl命令不建议使用名称myFile发送二进制文件。您可以在POST命令中分析curl字段的名称,并希望解决问题。 (还尝试在代码中打印整个$_POST$_FILES数组以进行调试)