У меня есть (imho) действительно странная проблема. Я объявлял конфигурационные переменные в файле конфигурации и хотел бы получить доступ к этим переменным из одной функции на той же странице. Эта функция вызовет SOAP-вызов службе для получения некоторых данных.Глобальная область не работает в PHP-функции
Я включаю этот файл конфигурации на разные страницы, но когда я присоединяюсь к функции, переменные пусты, даже когда я объявляю глобальный балл. Мой (упрощенный) код выглядит следующим образом:
config.php
// Set environment
$environment = 'dev';
switch($environment){
case 'dev':
$username = 'dev';
$client = new SoapClient('http://dev.domain.com/wsdl?wsdl', array('trace' => 1, 'exceptions' => 0));
break;
case 'prod';
$username = 'prod';
$client = new SoapClient('http://prod.domain.com/wsdl?wsdl', array('trace' => 1, 'exceptions' => 0));
break;
default:
$username = 'prod';
$client = new SoapClient('http://prod.domain.com/wsdl?wsdl', array('trace' => 1, 'exceptions' => 0));
}
function fetch_data($request_id){
global $username;
$xml_post_string = '
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ver="https://domain.com">
<soapenv:Header/>
<soapenv:Body>
<ver:options>
<ver:rid>'.$request_id.'</ver:rid>
<ver:uid>'.$username.'</ver:uid>
</ver:options>
</soapenv:Body>
</soapenv:Envelope>
';
echo '<pre>';
echo 'Var: '.$username; // = empty
echo '</pre>';
// Curl headers
$headers = array(
"Content-type: text/xml;charset=\"utf-8\"",
"Accept: text/xml",
"Cache-Control: no-cache",
"Pragma: no-cache",
"SOAPAction: "https://domain.com",
"Content-length: ".strlen($xml_post_string),
);
// Curl options
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_URL, 'https://domain.com/call?wsdl');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_post_string); // the SOAP request
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
// Execute Curl call
$response = curl_exec($ch); // = credential error
}
На page.php я включить & вызовите функцию следующим образом:
require_once('config.php');
[..]
$response = fetch_data('1');
Когда я введите имя пользователя в Строка XML Я получаю ответ, который я хочу, но когда я использую переменную (как в примере), я получаю пустое значение для $username
.
Но почему?
редактировать: изменил exit;
к break;
и добавил процесс & выходной пример
** редактировать 2: ** Код между [..]
require_once('config.php');
global $current_user, $wp_query;
$user = wp_get_current_user();
$user_meta = get_user_meta($user->data->ID, 'exID');
$user_member_number = trim($user_meta[0]);
// Set locale for date notation
setlocale(LC_ALL, 'nl_NL');
$policy_id = $_GET['polis'];
$customer_call = array(
'options' => array(
'Credentials' => array(
'UserId' => $username // Normally more credentials like password are required as well
)
)
);
$customer_response = $client->FetchCustomer($customer_call);
$member_details = $customer_response->FetchCustomerResult->Result->PlatformCustomer;
$product_call = array(
'options' => array(
'Credentials' => array(
'UserId' => $username // Normally more credentials like password are required as well
)
),
);
$product_response = $client->FetchProduct($product_call);
if($product_response->FetchProductResult->Succeeded){
// Extract results
$product_info = $product_response->FetchProductResult->Result;
// Differentiate product response, depending on the ammount of rows returned
if($product_info->SummarizedProductInfo >= 2){
$products = $product_response->FetchProductResult->Result->Summary;
}else{
$products = $product_response->FetchProductResult->Result;
}
// Policy numbers for given user (for authentication purpose)
$member_active_policies = array();
// Iterate through policies and write policy number to array
foreach($products as $product){
array_push($member_active_policies, $product->PolicyNumber);
}
// Check if requested polis belongs to user
if(in_array($policy_id, $member_active_policies)){
// Iterate through products to find the requested
foreach($products as $product){
if($product->PolicyNumber == $policy_id){
// Set member variables, all with prefix $member_
// Set product variables, all with prefix $product_
// Fetch information about other members
$all_members = fetch_data(1)->GetProductInfo;
Пожалуйста, напишите полный код, [..], возможно, перепишите переменную '$ username'. Btw: Старайтесь не зависеть от глобалов, где бы вы ни находились. Используйте вместо этого, например: классы со статическими переменными –
Stab in the dark: место, где вы 'require_once ('config.php')' * не является глобальным *, например. вам нужен этот файл внутри функции. Просто попробуйте вообще не использовать глобалы или, по крайней мере, сделать их константами. – deceze
Между вашим требованием и вызовом функции должно быть что-то. Где вы положили [...]. Потому что, если я запускаю ваш код, все в порядке, echo возвращает dev. –