«@ / path / to / a / file» в PHP, что это значит? - PullRequest
0 голосов
/ 27 августа 2011

Я наткнулся на следующий пример кода:

$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 ]

6 голосов
/ 27 августа 2011

Я не знаю, какую библиотеку вы используете, но я предполагаю, что она использует внутреннее расширение PHP cURL , потому что именно так вы указываете путь к файлу, который вы хотите загрузить т. е. путем добавления пути к @. Посмотрите этот пример из руководства по PHP :

<?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);
2 голосов
/ 28 августа 2011

Синтаксис {$expression} является одним из способов встраивания переменной или выражения в строку в PHP, подобно синтаксису #{expression} в Ruby.

Так что "@{$image}" эквивалентно'@'.$image.

@ используется модулем curl для дифференциации значения обычной переменной 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.

2 голосов
/ 27 августа 2011

Глядя на код в вопросе, знак '@' является лишь частью строковой переменной. Это не имеет особого значения для PHP как языка.

Это может иметь особое значение для кода, которому он передается, но для PHP это не что иное, как простая строковая переменная, которая начинается со знака '@'.

Исходя из контекста, я полагаю, что он передается в Twitter как часть объекта JSON. В этом случае это может иметь особое значение для Twitter, но я не знаю API, поэтому я не могу сказать вам это наверняка. В любом случае, это не вопрос PHP.

...