如何使用GET发送文件而不是在php中使用curl发送文件

时间:2018-02-27 15:49:42

标签: php curl

我正在尝试发送我的文件,但是使用GET而不是使用curl POST。

我有:

$data = array(
'uploaded_file' => '@'.$tmpfile.';filename='.$filename,
);

$ch = curl_init();   
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

我知道我可以轻松地发送带有这样的POST卷曲请求的文件(取自this question here):

public class test {
        public static void main(String[]args) {
            String test1 = "Nørrebro, Denmark";
            String test2 = "ø";
            String regex = new String("^&\\S*;$");
            String value = test1.replaceAll(regex,"");
            System.out.println(test2.matches(regex));
            System.out.println(value);
        }
    }

但是,我不希望我的请求成为POST。我似乎无法弄清楚如何在没有它的情况下合并文件传输。

任何帮助或建议?我想过使用curl_file_create()但是我不知道如何在这里实现它,因为它的文档非常糟糕。

1 个答案:

答案 0 :(得分:2)

curl_setopt($ch, CURLOPT_URL, "http://localhost/test.php/?".http_build_query(array(
    'name'=>basename($file),
    'file_contents'=>file_get_contents($file)
)));

urlencoding是二进制安全的,因此您可以通过这种方式发送任何文件内容,但是, 对于大文件,与multipart / form-data相比,url编码非常浪费,每个非ascii字节(甚至一些ascii字节,如0x20)的开销为300%(例如,NULL字节编码为%00,使用3个字节,其中multipart / form-data只使用1个字节.10 MB二进制文件上传变为~30MB,其中multipart / form-data将使用10 MB) - 所以如果你&#39不要这样做;重新上传大文件,或带宽是否昂贵。您还应该记住许多流行的Web服务器(如nginx和apache)中默认存在的极限最大URL长度限制,以及大多数Web服务器如何记录完整URL,因此您的访问日志文件将变得非常大,包含每个文件以这种方式上传