Php 正在将.tmp文件而不是所需文件上载到服务器

Php 正在将.tmp文件而不是所需文件上载到服务器,php,curl,Php,Curl,我正在将一个文件上载到box.net。 我正在使用Curl发送文件 但我面临的问题是,它不会上载我选择的文件,而是上载一些.tmp文件 以下是我的代码: <?php $upload_url = 'Server-Url'; $tmpfile = $_FILES['new_file1']['tmp_name']; $_POST['new_file1'] = '@'.$tmpfile; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $uplo

我正在将一个文件上载到box.net。 我正在使用Curl发送文件

但我面临的问题是,它不会上载我选择的文件,而是上载一些.tmp文件

以下是我的代码:

<?php
$upload_url = 'Server-Url';

$tmpfile = $_FILES['new_file1']['tmp_name'];
$_POST['new_file1'] = '@'.$tmpfile;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $upload_url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $_POST); 

$response = curl_exec($ch);
curl_close($ch);
echo $response;     
?>


<form action=""
  enctype="multipart/form-data" accept-charset="utf-8" method="POST">
<input type="file" name="new_file1" />
<input type="text" name="share" value="1" />
<input type="submit" name="upload_files" value="Upload File" />
</form>

我做错什么了吗? 请任何人帮我解决这个问题。

tmp\u name
应该包含一个临时名称。实际文件名位于
name
元素中。看


但是,对于您拥有的代码,如果您使用
name
元素,则会在代码中引入一个巨大的漏洞,因为攻击者可能会使您的脚本从服务器上载本地文件。使用
move\u uploaded\u file()
来防止这种情况。

据我所知,curl不提供选择一个文件,但在上传过程中为其发送不同的名称。除非您想自己设计整个HTTP请求以实现这种灵活性,否则您必须重命名磁盘上的文件以给它取正确的名称将文件重命名为用户提供的任意名称始终是一个巨大的安全风险。下面我正在创建一个唯一的临时目录,并仔细检查文件是否会移动到该目录中,以避免路径注入攻击和覆盖其他文件。可能有,也可能没有更多的攻击向量,但我没有想到

do {
    $tmpDir = sys_get_temp_dir() . DIRECTORY_SEPARATOR . uniqid('upload');
} while (file_exists($tmpDir));
$uploadFile = realpath($tmpDir . DIRECTORY_SEPARATOR . basename($_FILES['new_file1']['name']));

if (strpos($uploadFile, $tmpDir) !== 0) {
    trigger_error('File path not within expected directory', E_USER_ERROR);
    exit;
}

mkdir($tmpDir, 0600);
move_uploaded_file($_FILES['new_file1']['tmp_name'], $uploadFile);

...
curl_setopt($ch, CURLOPT_POSTFIELDS, array('file' => "@$uploadFile"));
...

unlink($uploadFile);
rmdir($tmpDir);

嗯。。。那个tmp文件就是那个文件,它在上传过程中被重命名为一个tmp文件,就像往常一样?@deceze我能把它改回我原来的文件名吗?我是php初学者,看起来有点混乱。请你给我演示一下我需要做的操作。