我偶然发现了以下代码示例:
$image = 'file/path';
$code = $tmhOAuth->request('POST', 'https://upload.twitter.com/1/statuses/update_with_media.json',
array(
'media[]' => "@{$image}",
'status' => "Don't slip up" // Don't give up..
),
true, // use auth
true // multipart
);
令人困惑的位是“@ {$ image}”,文件路径前面的“at”符号是什么? 谢谢!
答案 0 :(得分:6)
我不知道您正在使用哪个库,但我认为它在内部使用PHP cURL扩展名,因为您指定cURL指向要上传的文件的路径,即通过使用@
预先添加路径。见example from the PHP manual:
<?php
/* http://localhost/upload.php:
print_r($_POST);
print_r($_FILES);
*/
$ch = curl_init();
$data = array('name' => 'Foo', 'file' => '@/home/user/test.png');
curl_setopt($ch, CURLOPT_URL, 'http://localhost/upload.php');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_exec($ch);
答案 1 :(得分:2)
查看问题中的代码,'@'符号只是字符串变量的一部分。它对PHP作为一种语言没有特殊意义。
它可能对传递给它的代码有特殊意义,但它不是PHP的任何东西,而是一个简单的字符串变量,它恰好以'@'符号开头。
从上下文来看,我猜大概它是作为JSON对象的一部分传递给Twitter的。在这种情况下,它可能对Twitter有特殊意义,但我不知道API,所以我无法告诉你这一点。无论如何,这不是一个PHP问题。
答案 2 :(得分:2)
{$expression}
语法是PHP中embed a variable or expression in a string的一种方式,比如Ruby中的#{expression}
语法。
因此"@{$image}"
相当于'@'.$image
。
curl module使用@
将常规POST变量值与要上传的文件名区分开来。您的库必须在内部使用curl模块或遵循相同的约定。
设置POST变量时,如果任何值以@
为前缀,则认为它是要上传的文件名:
curl_setopt($curl, CURLOPT_POSTFIELDS, array(
'regular_variable' => 'value',
'some_file' => '@/path/to/filename', // this is treated as a file to upload
));
这不是众所周知的,如果程序员不知道这一点,可能会导致安全问题。通过将查询字符串传递给CURLOPT_POSTFIELDS(http_build_query()),可以禁用。
这对PHP本身没有特殊意义。