, если arg ~ = nil и arg [0] == string.sub (debug.getinfo (1, 'S'). source, 2) затем распечатайте «Основной файл», затем распечатайте «Library» end [ ! d1]
Объяснение:
arg
, с arg [0]
- имя скрипта. debug.getinfo
возвращает таблицу информации, описывающую функцию на уровне стека, заданную его аргументом с номером ( 1 относится к функции, вызывающей getinfo
; 0 относится к getinfo
). Его второй параметр не является обязательным: он определяет, какое подмножество полей getinfo извлекается. [!d]] source
таблицы, возвращаемое getinfo
для файлов, содержит строку S . имя файла, в котором была определена функция, с префиксом @
. Передав значение этого поля в string.sub (..., 2)
, мы разделим его на @
. (Поле short_src
содержит имя без @
, но это потому, что оно определено как «удобное для печати» имя и менее безопасно, чем удаление источника [ ! d14].)
Обратите внимание, что этот код использует функцию debug
, поэтому в 5.2 вам нужно будет потребовать отладки
до быть в состоянии использовать его.
У вас есть пустой $_POST
. Если ваш веб-сервер хочет видеть данные в json-формате, вам нужно прочитать исходный ввод, а затем проанализировать его с помощью декодирования JSON.
Вам нужно что-то вроде этого:
$json = file_get_contents('php://input');
$obj = json_decode($json);
Также у вас неправильный код для тестирования JSON-связи ...
CURLOPT_POSTFIELDS
сообщает curl
, чтобы кодировать ваши параметры как application/x-www-form-urlencoded
. Вам нужна JSON-строка.
UPDATE
Ваш php-код для тестовой страницы должен быть таким:
$data_string = json_encode($data);
$ch = curl_init('http://webservice.local/');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($data_string))
);
$result = curl_exec($ch);
$result = json_decode($result);
var_dump($result);
Также на странице вашего веб-сервиса вы должны удалить одну из строк header('Content-type: application/json');
. Его нужно вызывать только один раз.
вы можете поместить свой json в параметр и отправить его вместо того, чтобы помещать только ваш json в заголовок:
$post_string= 'json_param=' . json_encode($data);
//open connection
$ch = curl_init();
//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_POST, 1);
curl_setopt($ch,CURLOPT_POSTFIELDS, $post_string);
curl_setopt($curl, CURLOPT_URL, 'http://webservice.local/'); // Set the url path we want to call
//execute post
$result = curl_exec($curl);
//see the results
$json=json_decode($result,true);
curl_close($curl);
print_r($json);
на стороне службы вы можете получить свою строку json в качестве параметра:
$json_string = $_POST['json_param'];
$obj = json_decode($json_string);
, тогда вы можете использовать преобразованные данные как объект.
Привет, это фрагмент старого проекта, который использует curl для получения ip-информации от некоторых бесплатных служб ip-баз данных, которые отвечают в json-формате. Я думаю, что это может вам помочь.
$ip_srv = array("http://freegeoip.net/json/$this->ip","http://smart-ip.net/geoip-json/$this->ip");
getUserLocation($ip_srv);
Функция:
function getUserLocation($services) {
$ctx = stream_context_create(array('http' => array('timeout' => 15))); // 15 seconds timeout
for ($i = 0; $i < count($services); $i++) {
// Configuring curl options
$options = array (
CURLOPT_RETURNTRANSFER => true, // return web page
//CURLOPT_HEADER => false, // don't return headers
CURLOPT_HTTPHEADER => array('Content-type: application/json'),
CURLOPT_FOLLOWLOCATION => true, // follow redirects
CURLOPT_ENCODING => "", // handle compressed
CURLOPT_USERAGENT => "test", // who am i
CURLOPT_AUTOREFERER => true, // set referer on redirect
CURLOPT_CONNECTTIMEOUT => 5, // timeout on connect
CURLOPT_TIMEOUT => 5, // timeout on response
CURLOPT_MAXREDIRS => 10 // stop after 10 redirects
);
// Initializing curl
$ch = curl_init($services[$i]);
curl_setopt_array ( $ch, $options );
$content = curl_exec ( $ch );
$err = curl_errno ( $ch );
$errmsg = curl_error ( $ch );
$header = curl_getinfo ( $ch );
$httpCode = curl_getinfo ( $ch, CURLINFO_HTTP_CODE );
curl_close ( $ch );
//echo 'service: ' . $services[$i] . '</br>';
//echo 'err: '.$err.'</br>';
//echo 'errmsg: '.$errmsg.'</br>';
//echo 'httpCode: '.$httpCode.'</br>';
//print_r($header);
//print_r(json_decode($content, true));
if ($err == 0 && $httpCode == 200 && $header['download_content_length'] > 0) {
return json_decode($content, true);
}
}
}