PHP中的“@ / path / to / a / file”是什么意思?

时间:2011-08-27 19:39:51

标签: php string filepath

我偶然发现了以下代码示例:

$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”符号是什么? 谢谢!

3 个答案:

答案 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本身没有特殊意义。