PDA

View Full Version : استفاده از curl در php



IKHATAMI
سه شنبه 13 آبان 1399, 11:52 صبح
سلام
من از curl در برنامه استفاده کرده ام در مواردی که url همان localhost هست جواب درسته اما وقتی فایل 2.php در هاست بارگزاری میشه و آدرس url را آدرس سایت قرار می دهم جواب مشکل دار میشه یعنی برگشتی نال میشه.
************* فایل 1.php ************


<?php
$data = array('Token'=>'mytoken','Name' => 'Ali');
$url = 'localhost/2.php';

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_URL,$url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($curl, CURLOPT_POSTFIELDS,http_build_query($data));
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($curl);
curl_close($curl);

echo $result;
echo "<br>";

$result1 = json_decode($result);
echo ($result1->Token);
?>
************* فایل 2.php ************


<?php
class data{
public $Token;
public $Name;
};
$dataObj = new data();
$dataObj->Token = $_POST['Token'] ;
$dataObj->Name = $_POST['Name'] ;
$str_data = json_encode($dataObj);
echo $str_data;
?>
**************** بعد از اجرا

{"Token":"mytoken","Name":"Ali"}
mytoken
ولی اگر فایل 2.php در سایت دیگری باشه و ما آدرس سایت را در url فایل اولی مثلا https://xxx/yy/2.php بگذاریم خروجی میشه :

{"Token":"mytoken","Name":"Ali"}
یعنی نمی تونیم به اجزای کلاس دسترسی داشته باشیم البته خروجی result ظاهرش شبیه کلاس هست

plague
سه شنبه 13 آبان 1399, 12:46 عصر
من نفهمیدم مشکل اینه که curl نال برمیگردونه یا خروجیش آبجکت نیست ؟


اگه نال برمیگردونه
curl تنظیماتی داره که میتونی فعال کنی بهت بگه اگه ارروری هست

https://stackoverflow.com/questions/3987006



اگه آبجکت نیست که خب طبیعیه شما وقتی جیسون کنی تبدیل به رشته میشه و دیگه شی از کلاس نیست باید دیکدش کنی تا دوباره آبجکت بشه

IKHATAMI
سه شنبه 13 آبان 1399, 13:12 عصر
سلام وتشکر من در تابع 1.php دیکد کرده ام ولی این دیکد درلوکال اوکی میشه ودر سایت نه $result1 = json_decode($result);

echo ($result1->Token);

plague
چهارشنبه 14 آبان 1399, 12:19 عصر
وقتی یک متغیر اونجور یکه انتظار داری نیست
راهش اینه که var_dump کنی ببینی چی داخلشه


شما هم خروجی curl رو var_dump کن قبل از دیکد کردن که مطمئن بشی جیسون هستش
هم بعد از دیکد کردن var_dump کن

IKHATAMI
چهارشنبه 14 آبان 1399, 19:55 عصر
وقتی یک متغیر اونجور یکه انتظار داری نیست
راهش اینه که var_dump کنی ببینی چی داخلشه


شما هم خروجی curl رو var_dump کن قبل از دیکد کردن که مطمئن بشی جیسون هستش
هم بعد از دیکد کردن var_dump کن

خروجی با استفاده از var_damp (در حالتی که فایل 2 روی سرور دیگری غیر از لوکال قرار دارد)

string(35) "{"Token":"mytoken","Name":"Ali"}"
NULL

مشکل کجاست؟:گریه::گریه:

plague
پنج شنبه 15 آبان 1399, 12:12 عصر
خب مشخصه دیگه اول رشته json یک سری کاراکتر داری  که باعث میشه رشته جیسون خراب بشه و قابل دیکد نباشه در نتیجه دیدش null برمیگردونه