شنبه ۲۲ شهریور ۱۴۰۴

Saturday, September 13, 2025 GMT +3:30

ارسال پارامتر به URL و دریافت مقادیر با PHP

php-curl-file-get-contents

زمانی که از ارسال پارامتر در وب صحبت می کنیم، بیشتر ذهنمان معطوف به فرم های HTML و متد POST یا GET می شود، البته این شیوه مرسوم و پرکاربردی برای ارسال داده ها از مرورگر (سمت کاربر) به یک سایت (سمت سرور) است، اما گاهی مواقع نیاز است که از این قالب سنتی پا را فراتر بنهیم و از روش های دیگری نیز استفاده کنیم، به فرض از همین استاندارد POST و GET در ارسال درخواست های آژاکسی (Ajax) نیز به سرور استفاده می شود، از طرفی کدها و توابعی در PHP وجود دارد که می توانند علاوه بر ارسال پارامترها به یک سرور (آدرس URL)، پاسخ آن را نیز دریافت کنند، امکان بالقوه ای که می تواند کاربردهای زیادی داشته باشد، از جمله مهمترین این توابع file_get_contents و cURL هستند که در ادامه آموزش به آنها خواهیم پرداخت.

تابع file_get_contents


از تابع file_get_contents در PHP برای خواند اطلاعات یک فایل یا آدرس URL استفاده می شود، به عنوان مثال:
<?php
$homepage = file_get_contents('https://webgoo.ir/');
echo $homepage;
?>
کد بالا با ارسال یک درخواست به آدرس تعیین شده، پاسخ سرور (که صفحه اول سایت «وبگو» است) را به صورت رشته متنی دریافت می کند، اکنون اگر با دستور echo از متغیر فرضی homepage خروجی بگیریم، اطلاعات دریافت شده نمایش داده می شوند.
تابع file_get_contents  پنج آرگومان به شرح زیر می پذیرد:
- آرگومان اول (filename): نام (یا آدرس) فایل یا URL.
- آرگومان دوم (use_include_path): فراخوانی فایل از دایرکتوری include_path در تنظیمات PHP.
- آرگومان سوم (context): محتوایی که به همراه درخواست ارسال می شود، این محتوا باید توسط تابع  stream_context_create (و بر اساس استانداردهای HTTP context options) ساخته شود تا معتبر باشد، تنظیمات قابل اعمال در این قسمت عبارتند از: method، header، user_agent، content، proxy، request_fulluri، follow_location، max_redirects، protocol_version، timeout و ignore_errors؛ اطلاعات بیشتر:
http://php.net/manual/en/context.http.php
- آرگومان چهارم (offset): محل و خط شروع خواندن اطلاعات (این قابلیت به دلیل پشتیبانی نشدن برای فایل های لوکال و محدودیت هایش، چندان کاربردی نیست).
- آرگومان پنجم (maxlen): حداکثر کاراکتری که تابع خواهد خواند (در حالت پیش فرض تمام اطلاعات خوانده می شود).

تابع file_get_contents و متد POST


تابع file_get_contents علاوه بر دریافت پاسخ یک سرور، این توانایی را دارد که در چاچوب متد POST پارامترهایی نیز به سرور مقصد ارسال نماید، همان طور که در توضیح آرگومان های آن گفته شد، این پارامترها باید در چارچوب استاندارد HTTP بوده و پیش از ارسال توسط تابع stream_context_create معتبر شوند، به این ترتیب می توان نحوه کار فرم های HTML را به راحتی شبیه سازی کرد، ضمن اینکه علاوه بر ارسال پارامترها، می توان هم زمان نتیجه درخواست را نیز دریافت کرد، به مثال زیر توجه کنید.
<?php
//مقادیری که باید ارسال شوند
$data = http_build_query(
    array(
    'var_1' => 'content_1',
    'var_2' => 'content_2',
    'var_3' => 'content_3'
    )
);
//تنظیم سربرگ های http
$http = array('http' =>
    array(
    'method'  => 'POST',
    'header'  => 'Content-type: application/x-www-form-urlencoded',
    'content' => $data
    )
);
//معتبر سازی با stream_context_create
$context = stream_context_create($http);
//ارسال درخواست و دریافت نتیجه
$result = file_get_contents('http://www.example.com/submit/get.php', FALSE, $context);
?>
نکته: برای نمایش نتیجه دریافتی می توانید از یک دستور ساده echo استفاده کرده و از متغیر result خروجی بگیرید.

تابع cURL


یکی از قدرتمند ترین کتابخانه های مربوط به کار با پروتکل های وب در PHP، کتابخانه libcurl است که از نسخه 4.0.2 به آن افزوده شده است، البته این کتابخه به صورت پیش فرض در مفسر PHP وجود ندارد، اما به جهت کاربردی بودن، معمولا در اکثر سرورها به صورت پیش فرض فعال است، به طور ساده کتابخانه libcurl دربرگیرنده مجموعه توابعی است که کار با پروتکل های وب (از جمله HTTPS، HTTP، FTP و...) را به صورت حرفه ای و با قابلیت های زیاد ممکن می کند، به مثال زیر توجه کنید.
<?php
$content = 'PHP cURL';
$curl = curl_init('http://www.example.com/submit/get.php');
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, 'var='.$content);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, FALSE);
$result = curl_exec($curl);
curl_close($curl);
?>
همان طور که در مثال بالا مشخص است، توابع مربوط به این کتابخانه با پیشوند _curl شروع می شوند، اما توضیح مختصری درباره برخی توابع این کتابخانه:
- تابع curl_init: با دریافت یک آدرس url، نشست cURL را آغاز می کند.
- تابع curl_setopt: تنظیم پارامترهای مورد نیاز برای اجرای صحیح یک نشست cURL.
- تابع curl_exec: اجرای یک نشست cURL.
- تابع curl_close: پایان یک نشست cURL.
- تابع curl_error: آخرین خطای رخ داده در نشست را نمایش می دهد.
- تابع curl_errno: شماره خطای برگردانده شده را نمایش می دهد.
البته توابع مربوط به این کتابخانه محدود به موارد گفته شده نمی شود:
http://www.php.net/manual/en/book.curl.php
به مثالی کاربردی توجه کنید.
<?php
//تنظیم آدرس url
$curl = curl_init('http://www.example.com/submit/get.php');
//تنظیم ارسال از طریق متد POST
curl_setopt($curl, CURLOPT_POST, 1);
//تنظیم پارامترها
curl_setopt($curl, CURLOPT_POSTFIELDS, 'var_1=content_1&var_2=content_2&var_3=content_3');
//تعین اینکه پاسخ سرور دریافت شود یا خیر
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
//اجرای نشست
$result = curl_exec($curl);
//پایان نشست
curl_close($curl);
?>
توضیح:
- آدرس url مقصد را در قسمت curl_init مشخص کنید.
- در تنظیمات مربوط به CURLOPT_POST، متد استفاده شده در درخواست را مشخص می کنیم، اگر مقدار 1 یا TRUE باشد، مقادیر CURLOPT_POSTFIELDS از طریق متد POST ارسال شده و پارامترهای احتمالی در آدرس URL نادیده گرفته می شوند (امکان ترکیب متد POST و GET در این حالت وجود ندارد).
- در تنظیمات قسمت CURLOPT_POSTFIELDS، پارامترها و مقادیر آنها را تعیین کنید، این پارامترها در واقع نقش نام فیلد و مقادیر آنها نقش مقدار فیلد را در یک فرم HTML بازی می کنند.
- در قسمت CURLOPT_RETURNTRANSFER، مشخص می کنیم که آیا پاسخ سرور نیز پس از ارسال درخواست دریافت شود یا خیر، اگر مقدار TRUE باشد، پاسخ به صورت رشته متنی دریافت می شود و اگر FALSE باشد، پاسخ دریافت نمی شود.
- برای تکمیل یک نشست cURL باید حتما با تابع curl_exec آن را اجرا کنیم.
- در نهایت نیز با تابع curl_close، نشست cURL را خاتمه می دهیم.
نکته: برای نمایش نتیجه دریافتی می توانید از یک دستور ساده echo استفاده کرده و از متغیر result خروجی بگیرید.
دسته بندی: آموزش کاربردی » PHP
related مطالب بیشتر:
آموزش ساخت نقشه XML سایت (Sitemap) با PHP و MySQL
نمایش آمار بازدیدها با PHP بدون استفاده از دیتابیس
دریافت و نمایش پیج رنک گوگل با PHP
محدود کردن لینک دانلود مستقیم فایل ها با PHP و htaccess
نمایش قسمتی از متن و پاراگراف با PHP
دیدگاه
more ۱۴۶ دیدگاه برای این مطلب ارسال شده است.
more چینش دیدگاه ها به ترتیب از جدیدترین به قدیمی ترین است.
۱۸:۱۰ ۱۳۹۲/۱۱/۱۲
سلام خسته نباشید من از تابع
file_get_contents("http://cdn.tsetmc.com/Loader.aspx");
استفاده کردم و ادرس فوق را هم تحت هر شرایطی چه base64 , utf8 امتحان کردم اما جواب نگرفتم . و منظورم اینه که فونت ها کاملا به هم ریخته بودند و اصلا حتی با استفاده از تابع file_put_contetents هم نتوانستم فایل ذخیره شده در کامپیوتر را با فونت مربوطه فراخوانی کنم این در حالیه که وقتی سورس این سایت به خصوص را می بینم هیچ موردی ندارد و قابل رویت با فونت های فارسی است . ممنون می شوم راهنمایی بفرمایید چه کدی استفاده کنم تا این سورس قابل رویت باشه و فونت های اون به هم ریخته نباشد.
سلام
از کد زیر برای دریافت و ذخیره سازی سایت مزبور استفاده کنید:
<?php
function fileGetContentsCurl($url){
$curl = curl_init();
$agent = 'Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20120716 Firefox/15.0a2';
$header = array('Accept-Charset: UTF-8');
curl_setopt($curl, CURLOPT_FAILONERROR, TRUE);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_AUTOREFERER, TRUE);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($curl, CURLOPT_MAXREDIRS, 2);
curl_setopt($curl, CURLOPT_USERAGENT, $agent);
curl_setopt($curl, CURLOPT_ENCODING, 'gzip');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, 3);
curl_setopt($curl, CURLOPT_URL, $url);
$data = curl_exec($curl);
curl_close($curl);

return $data;
}
$html = fileGetContentsCurl('http://cdn.tsetmc.com/Loader.aspx');
file_put_contents('text.txt', $html);
?>
نکته: تابع cURL باید در هاستتان فعال باشد.
سینا
۱۲:۰۲ ۱۳۹۲/۱۱/۱۰
سلام و عرض خسته نباشید بابت سایت خوبتون میخواستم بدونم چطور میشه در فرم ثبت نام کاربران از وجود یا عدم وجود ایمیل کاربر اطمینان حاصل کرد که تقلبی نباشه
سلام
راهی برای تشخیص اینکه ایمیل کاربر واقعی است یا خیر وجود ندارد! تنها استفاده از قابلیت هایی مانند OpenID و آن هم در برخی سرویس دهنده های ایمیل ممکن است (که البته نیاز به ورود کلمه عبور از طرف کاربر دارد، لذا خیلی برای این مورد کاربردی نیست).
۰۱:۵۳ ۱۳۹۲/۱۱/۰۱
سلام من از فرم ها استفاده کردم : یه مقداری رو وارد میکنم و اون میره در دیتابیس ذخیره میشه و سپس نمایش داده میشه.حالا میخوام وقتی اون مقدار رو وارد میکنم ، دیگه صفحه رفرش نشه و بلافاصله بعدش نمایش بده؟؟ میشه یه نمونه کد بهم معرفی کنید ؟؟ ممنون
سلام
به نظر باید از آژاکس (Ajax) بدین منظور استفاده کنید، لطفا به آموزش های مربوطه مراجعه کنید.
ali
۰۹:۲۳ ۱۳۹۲/۱۰/۳۰
سلام من در حال طراحی یک کنترل پنل برای سایت هستم که نسبتا تموم شده اما میخوام یه پنل دیگری طراحی کنم که کاربر بتونه ابزارهای که می خواد تو کنترل پنل بیاره مثلا عکس آیکون اسم آیکون و مسیرش تو سایت را بفرسته تو قسمتی از کنترل پنل که مشخص شده برای این کار باید چیکار کنم
چه کدی باید با php بزنم
سلام
لطفا از طرح سوالات کلی خودداری کنید!
پاسخ روشنی برای سوالتان وجود ندارد، باید گام به گام متناسب با سیستم مورد نظرتان کدنویسی کنید، به فرض اگر به آپلود نیاز است، باید بخشی برای این کار تعریف کنید (توابع مربوط به فایل، کار با متدها، آرایه ها و...)، در کل اگر برنامه نویس باشید می توانید مراحل را تعریف و کدهای هر قسمت را بنویسید و در قالب یک مجموعه به هم ارتباط دهید.
۱۸:۴۸ ۱۳۹۲/۱۰/۲۸
با سلام
توضیحات شما کاملا درست است اما دریافت صفحه با تابع curl هیچ فایده ای ندارد زیرا همانطور که قبلا هم گفتم چیزی به عنوان آمار و ارقام در سورس سایت
http://worldometers.info
وجود ندارد که بتوان آن را ذخیره کرد.
به همین علت بود که همیشه از شما سوال می کردم که چطور باید خروجی سایت را ذخیره کرد نه سورس آن را!!!!!!
لطفا خودتان هم امتحان کنید تا متوجه منظور من بشوید.
این نکته را هم بگویم که ذخیره سایت بالا با browser ها مثلا فایرفاکس کاملا امکان پذیر است .
اما با curl فکر نکنم.
آیا هیچ راه حلی وجود ندارد که بتوان سایت را ذخیره کرد؟ (یعنی خروجی سایت نه سورس آن)
با تشکر
سلام
متوجه منظورتان هستیم اما کاری که شما می خواهید انجام دهید به سادگی امکانپذیر نیست، چون باید فایل های JS و CSS را به صورت جداگانه از DOM استخراج کنید که کار ساده ای نیست، در موارد اینچنین باید سورس ها را بررسی و لینکی که در پاسخ آن صرفا اعداد دریافت می شود را پیدا کنید و به آن درخواست curl بدهید (قاعدتا با انبوه کدهای موجود و پارامترهای به کار رفته در دستورات اسکریپتی سایت مورد نظر، خیلی ساده به نظر نمی رسد).
۲۳:۱۳ ۱۳۹۲/۱۰/۲۷
با سلام
به نظر می رسد شما فکر می کنید که اطلاعات من در زمینه مبانی وب کافی نیست.
شاید حرف شما درست باشد!!!!!!
لطفا به سایت زیر بروید
http://worldometers.info
این سایت آمار و اطلاعات را زنده نمایش می دهد به وسیله ترکیبی از برنامه نویسی آژاکس و جاوا اسکریپت!
لطفا کدی را به من معرفی کنید که بتواند سایت بالا را در دامنه خودم نمایش دهد، چه با curl و چه با file_get_contents، فرقی نمی کند.
آن وقت منظورم را از تمامی سوالات بالا خواهید فهمید، این کار قطعا امکان پذیر است .
با تشکر فروان و سپاس فراوان به خاطر پاسخگویی به تمامی سوالات.
سلام
برای اینگونه موارد توابع سمت سرور مناسب نیستند، باید از روش هایی مانند iframe استفاده کنید:
<iframe src="http://www.worldometers.info" width="800" height="600" frameborder="0"></iframe>
راه حل دیگر این است که با تابع curl صفحه را به صورت مداوم از سایت اصلی دریافت ، در دیتابیس یا فایل ذخیره و سپس در صفحه خود یک کد آژاکسی داشته باشید که پاسخ دریافت شده توسط curl را (که در دیتابیس یا در یک فایل متنی ذخیره شده) فراخوانی کرده و در مرورگر نمایش دهد.
۰۱:۱۶ ۱۳۹۲/۱۰/۲۷
با سلام
به نظر می رسد منظور من را از سوال های قبلی را درست متوجه نشده باشید !!!
شما فرض کنید کد زیر در یک وب سایت باشد
<script language="javascript" src="/team.js" type="text/javascript"></script>	
و مثلا تا زمانی که دکمه ای در کیبورد فشرده نشود کد بالا کار نکند و همچنین ممکن است این کد با کد های php هم ترکیب شده باشد.
حال ما وقتی بخواهیم با curl این سایت را به نمایش درآوریم باید چکار کنیم؟؟
و همچنین به جز مشکل بالا مشکل دیگری هم داریم.
با توجه به
"/team.js"
وقتی سورس سایت example.com را در سایت خود نمایش دهیم این کد به عبارتی خراب می شود.
پس در کل چطور باید کد های جاوا یا جاوااسکریپتی که فقط با رویداد حالتی مثلا زدن یک دکمه کار می کنند را با تابع curl نمایش داد؟؟
لطفا اگر امکان دارد کتابی جامع و کامل در زمینه curl معرفی کنید
با تشکر
سلام
مشکل کار نکردن کد به curl ارتباط (مستقیمی) ندارد! همان طور که در پاسخ به سوالات قبلی گفتیم، این متفاوت بودن آدرس صفحه است که منجر به عدم بارگذاری فایل ها با آدرس نسبی و در نتیجه از کار افتادن امکانات وابسته به آنها می شود (متاسفانه ظاهرا اطلاعات شما در زمینه مبانی وب کافی نیست)، اگر با نحوه کار آدرس دهی به صورت نسبی آشنا باشید، پاسخ سوالاتتان در موارد قبلی کاملا داده شده، در مورد کتاب باید عرض کنیم مبحث تابع curl به اندازه ای پیچیده نیست که برایش کتابی مجزا منتشر شود، شاید در قسمتی از کتاب های مربوط به آموزش PHP به این تابع اشاره ای شده باشد.
۱۸:۳۹ ۱۳۹۲/۱۰/۲۶
با سلام
لطفا مثالی بزنید که با تابع curl بتوان آدرس سایت خودتون
webgoo.ir/example/ajax/simple-ajax-form.html
رو نمایش بده یعنی ارسال آزاکسی بده و بعد زمان رو نشون بده.
با تشکر
سلام
چنین کاری به لحاظ امنیت سرور امکانپذیر نیست!
نمی توانید از دامنه خود به سرور سایت دیگر درخواست ارسال کنید (مگر اینکه سایت مقصد این اجاز را بدهد).
۱۷:۲۶ ۱۳۹۲/۱۰/۲۶
با سلام
کد زیر یکی از کد های آموزشی سایت خودتان راجع به آموزش آژاکس است.
<script language="javascript" type="text/javascript">
<!--
//تابعی که در تمام مرورگرها پشتیبانی می شود
function ajaxFunction(){
var ajaxRequest;

try{
//Opera 8.0+, Firefox, Safari
ajaxRequest = new XMLHttpRequest();
}
catch(e){
//Internet Explorer
try{
ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e){
try{
ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e){
//در صورت بروز خطا
alert("متاسفانه مرورگر شما از آژاکس پشتیبانی نمی کند");
return false;
}
}
}
// این تابع اطلاعات ارسالی از سرور را دریافت می کند
ajaxRequest.onreadystatechange = function(){
//بررسی درست بودن حالت آماده
if(ajaxRequest.readyState == 4){
document.myForm.time.value = ajaxRequest.responseText;
}
}
ajaxRequest.open("GET", "time.php", true);
ajaxRequest.send(null);
}
//-->

</script>
</head>
<body>
<form name='myForm' action='#'>
نام: <input type='text' name='username' onchange='ajaxFunction();'/>
<br />
<br />
زمان: <input type='text' name='time' />
</form>
در این کد پس از نوشتن نام زمان آن لحظه را خروجی میدهد
اما با تابع CURL نمی توان درخواستی را فرستاد که زمان را نتیجه دهد؟!!!!!
یعنی چطور باید" ارسال آژاکسی" با تابع CURL فرستاد؟؟
با تشکر
سلام
زمانی که کد در صفحه اصلی خودش نمایش داده می شود، آدرس نسبی فایل (که درخواست آژاکس به آن ارسال می شود) نیز بر اساس آدرس حقیقی سایت حساب می شود، به فرض اگر با مرورگر آدرس زیر را فراخوانی کنید:
http://yoursite.com/frame
و در کد درخواست آژاکسی به فایلی به نام get.php ارسال شود، در واقع آدرس این فایل به صورت زیر برای مرورگر تفسیر می شود:
http://yoursite.com/frame/get.php
قاعدتا زمانی که با curl محتوا را به دامنه خود می آورید، باید در سرور دامنه شما، چنین فایلی وجود داشته باشد، چون آدرس جدید مطابق با سایت شما محاسبه می شود، اگر این فایل در سایت شما در دایرکتوری frame نباشد، خطای 404 Not Found دریافت می کنید.
نتیجه: curl یک تابع سمت سرور است و تنها نحوه ایجاد خروجی را مشخص می کند، از نظر مرورگر تفاوتی نمی کند که خروجی دریافت شده متعلق به کد یک سایت بوده یا خیر، مرورگر پاسخ دریافتی از سرور را بر اساس رفتار عادی خود پردازش می کند که نتیجه این رفتار در صورت عدم وجود فایل get.php در هاست شما، پیام 404 است!
۱۹:۵۶ ۱۳۹۲/۱۰/۲۵
با سلام
فرض کنید مثلا در یک سایت چند کد جاواسکریپت و یا .. است. وقتی که ما از کد زیر استقاده می کنیم
<?php
$curl = curl_init('http://www.example.com');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
$result = curl_exec($curl);
curl_close($curl);
echo $result;
?>
در اصل کار خاصی را انجام نمی دهیم فقط سورس سایت
http://www.example.com 
را در سایت خود نمایش میدهیم بنابراین کدهای جاوا اسکریپت و یا ajax در آن کار نمی کنند.
من می خواهم ببینم آیا راهی وجود داره که خروجی سایت رو نشون بده ؟
یعنی مثل اینکه یک سایت رو save کنیم و بعد نمایش بدیم
امیدوارم منظورم رو متوجه شده باشید.
سلام
منظور سوالتان مشخص نیست!
"...کدهای جاوا اسکریپت و یا ajax در آن کار نمی کنند..."؟! با این روش سایت مقصد بدون هیچ مشکلی نمایش داده می شود و کدها نیز کار می کنند، تنها آدرس سایت شما در مرورگر نشان داده می شود.
"...آیا راهی وجود داره که خروجی سایت رو نشون بده..."؟! خیلی واضح نیست! سایت مورد نظر به صورت یک رشته متنی در متغیر result مقداردهی می شود، و خروجی آن در واقع همان کدهای سایت است.
"...مثل اینکه یک سایت رو save کنیم و بعد نمایش بدیم..." واضح نیست! وقتی محتوای یک سایت را دریافت می کنید، دقیقا مثل این است که آن را به فرض در دیتابیس داشته باشید.
۱۷:۰۲ ۱۳۹۲/۱۰/۲۵
با سلام
آیا راهی وجود دارد که پس از بالا آمدن سایت و اجرای اسکریپت ها سایت به نمایش درآید؟
برای مثال آیا کدی فرضی شبیه زیر وجود دارد؟
<?php
$curl = curl_init('http://www.example.com');
curl_setopt($curl, CURLOPT_run script, TRUE);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
$result = curl_exec($curl);
curl_close($curl);
echo $result;
?>
سلام
منظور سوالتان مشخص نیست! هنگامی که سرور خروجی را به مرورگر ارسال می کند سایت بارگذاری شده و ارتباط مرورگر با سرور قطع می شود، اما اینکه سایت چه زمانی برای کاربر قابل روئیت باشد را باید با نوشتن کدهای اسکریپتی (مانند جاوا اسکریپت) و به طور مثال در نظر گرفتن یک timeout تعیین کرد.
۱۷:۵۱ ۱۳۹۲/۱۰/۲۳
با سلام
من از کد زیر استفاده کردم
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
ولی خطای زیر را میدهد
CURLOPT_FOLLOWLOCATION cannot be activated when safe_mode is enabled or an open_basedir is set in
با بخش پشتیبانی تماس گرفتم اونا میگن غیر فعال کردن safe-mode به دلایل امنیتی وجود نداره .
آیا کدی جایگزین و شبیه کد بالا وجود نداره؟؟
مرسی
سلام
تجربه نشان می دهد هاستی که safe-mode آن قابل خاموش شدن نباشد، کاربران را به زحمت خواهد انداخت!، بیشتر هاست ها این امکان را فراهم می کنند تا کاربران قابلیت safe-mode را خاموش کنند؛ کد جایگزینی در اختیار نداریم.
۱۴:۱۹ ۱۳۹۲/۱۰/۲۲
با سلام
میخواستم راجع به لاگین شدن با تابع curl بدونم. لطفا کمکم کنید چندتا کد دارم ولی کار نمی کنند.
مثلا:
<?php
$ch = curl_init();
$postData = array(
'login' => 'acogneau',
'pwd' => 'secretpassword',
'redirect_to' => 'http://example.com',
'testcookie' => '1'
);

curl_setopt_array($ch, array(
CURLOPT_URL => 'http://example.com/wp-login.php',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $postData,
CURLOPT_FOLLOWLOCATION => true
));

$output = curl_exec($ch);
echo $output;
curl_close($ch);
؟>
لطفا راهنمایی کنید
سلام
می توانید از نمونه کد آماده زیر استفاده کنید (تنظیمات را متناسب با سایت خود تغییر دهید - تست نشده).
<?php
function curl_get_wp_login($login_user, $login_pass, $login_url, $visit_url, $http_agent, $cookie_file){
if(!function_exists( 'curl_init' ) || !function_exists('curl_exec')){
$m = "cUrl is not vailable in you PHP server.";
echo $m;
}
//Preparing postdata for wordpress login
$data = "log=". $login_user ."&pwd=" . $login_pass . "&wp-submit=Log%20In&redirect_to=" . $visit_url;
//Intialize cURL
$ch = curl_init();
//Url to use
curl_setopt($ch, CURLOPT_URL, $login_url);
//Set the cookies for the login in a cookie file.
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
//Set SSL to false
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
//User agent
curl_setopt($ch, CURLOPT_USERAGENT, $http_agent);
//Maximum time cURL will wait for get response. in seconds
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1 );
//Return or echo the execution
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//Set Http referer.
curl_setopt($ch, CURLOPT_REFERER, $login_url);
//Post fields to the login url
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_POST, 1);
//Save the return in a variable
$content = curl_exec($ch);

/*
** if you need to visit another url, you can do it here.
** curl_setopt( $ch, CURLOPT_URL, 'a new url address or a file download url' );
** $content = curl_exec ($ch);
*/


//Close the cURL.
curl_close($ch);

//You can echo or return the page data here.
echo $content;
}

//Username for login
$login_user = "admin";
//Password
$login_pass = "admin";
//Login url address.
$login_url = "http://localhost/wp/wp30/wp-login.php";
//Which page you want to visit after login.
$visit_url = urlencode( 'http://localhost/wp/wp30/wp-admin' );
//Cookie vaiable
$cookie_file = "/cookie.txt";
//Set HTTP user agent.
$http_agent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6";

//Test the call
curl_get_wp_login( $login_user, $login_pass, $login_url, $visit_url, $http_agent, $cookie_file );
?>
۱۵:۳۴ ۱۳۹۲/۱۰/۲۱
با سلام
با بخش پشتیبانی هاست خودم تماس گرفتم .
اونا میگن
""" مشکلی در برقراری ارتباط بین سرور میزبان سرویس شما با گوگل وجود ندارد.
درخواست های ارسالی به گوگل، توسط خود گوگل رد می شوند.
این مورد را باید از طریق پشتیبانی گوگل پیگیری کنید و در نهایت اگر نیاز به پیش نیاز هایی روی هاست بود، اطلاع دهید تا بررسی شود. """
آخه مشکل چیست ؟؟
با گوگل که نمیشه به راحتی ارتباط برقرار کرد ؟؟
من باید چکار کنم تا کد زیر در هاست من کار کنه
سلام
دوست گرامی، کد شما هم در لوکال و هم در سرور تست شده و به خوبی کار می کند، لذا شکی نیست که ایراد از تنظیماتی در سرور شما است، اما اینکه این تنظیمات چیست و آیا قابل رفع است یا خیر نیاز به بررسی های بیشتر و دسترسی به تنظیمات اصلی دارد که قاعدتا نه برای ما و نه برای شما مقدور نخواهد بود!
صرفا جهت راهنمایی: در صورت ضرورت از سرویس های سایت سرور پارس استفاده کنید.
۲۱:۱۱ ۱۳۹۲/۱۰/۲۰
سلام دوست عزیز
به نظر می رسد که مشکل من از سرور است و حل شدن آن سخت به نظر می رسد.
برای همین چون کد بالا در لوکال هاست شما به درستی کار می کند. می خواستم بدونم شما هاست خودتون رو از کدام سایت خریداری کردید؟
تا ما هم از همان سایت بخریم.
با تشکر
سلام
منظور از لوکال هاست، هاست مجازی است که با برنامه هایی مانند WampServer در سیستم کامپیوتر شخصی قابل ایجاد است!
more لطفا پیش از ارسال دیدگاه نکات زیر را مد نظر داشته باشید:
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.



 refresh
10 × 10
8 × 4
20 × 20
=