获取通过cURL POST发送的文件的内容

时间:2014-01-22 14:59:29

标签: php file post curl

所以经过研究,我发现可以通过cURL将文件发送到另一个页面。以下是执行发送部分的代码:

$url = 'http://someabc.com/api.php';
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_VERBOSE, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
$postData = array(
    'array' => "@".realpath('array.txt'),
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
$response = curl_exec($ch);

echo $response;

接收部分(api.php)

if(isset($_POST['array']))
{
    $string = $_POST['array'];
    echo $string;
}
else
{
    echo 'Not found';
}

当我运行包含cURL请求的页面时,我在页面上打印Not found

这是否意味着我以错误的方式捕获数据?如果是,那么从array.txt页面获取api.php的内容的方法是什么?

更新

按照Jon的建议使用$_FILES后,我收到了以下数组:

Array
(
    [name] => array.txt
    [type] => application/octet-stream
    [tmp_name] => /tmp/phpPQZXf9
    [error] => 0
    [size] => 77413
)

现在我尝试使用以下方法获取此文件的内容:

$tmp = $_FILES['array'];
$string = file_get_contents($tmp['name']['tmp_name']);

但得到了错误Warning: file_get_contents(a) [function.file-get-contents]: failed to open stream: No such file or directory,这意味着我没有正确引用该文件。我现在哪里出错了?

2 个答案:

答案 0 :(得分:2)

对于更新前的第一部分,存在问题,因为将文件发布到页面时,无论发生的方式如何(即<input type='file />curl等),它始终存在通过$_FILES变量可以使用PHP,在你的情况下,这是一个关联数组,应该是$_FILES['array'],包含临时文件位置的信息。该数组应类似于:

Array 
(
    [array] => Array
    (
            [name] => array.txt
            [type] => encoding type
            [tmp_name] => /tmp/path/file
            [error] => 0 (if no error)
            [size] => [filesize]
    )
)

从那里,要访问该文件,您需要将其从tmp目录移动到您有权访问的目录。这是通过move_uploaded_file完成的。使用它的一个例子是:

$upDir = 'uploads/';
move_uploaded_file($_FILES['array']['tmp_name'], $upDir. $_FILES['array']['name']);

从那里开始,文件将在uploads/array.txt中php文件的相对路径下的服务器上,你可以在那里用它来做。 ^^

答案 1 :(得分:1)

如果您尝试发布文件,数据将在$ _FILES上提供。您可以使用以下代码进行检查

var_dump($_FILES);

如果您从$ _FILES获取文件信息,那么您可以将“if(isset($ _ POST ['array']))”替换为

if(count($_FILES))
{
    ...
}
else
{
    echo 'Not found';
}

访问文件内容尝试:

$tmp = $_FILES['array'];
$string = file_get_contents($tmp['tmp_name']);