Я наткнулся на следующий пример кода:
$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» делает перед файловым путем? Благодаря!
Я не знаю, какую библиотеку вы используете, но я предполагаю, что он использует внутреннее расширение PHP cURL , потому что именно так вы указываете 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);
Рассматривая код в вопросе, знак «@» является частью строковой переменной. Он не имеет особого значения для PHP как языка.
Это может иметь особое значение для кода, к которому он передается, но это не что-то иное, кроме простой строковой переменной, которая начинается с знака «@».
Из контекста, я думаю, предположительно, он передается в Twitter как часть объекта JSON. В этом случае это может иметь особое значение для Twitter, но я не знаю API, поэтому я не мог сказать вам это наверняка. В любом случае, это не вопрос PHP.
Синтаксис {$expression}
– это один из способов встроить переменную или выражение в строку в PHP, например синтаксис #{expression}
в Ruby.
Итак, "@{$image}"
эквивалентно'@'.imimage.
@
Используется модулем 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.