article

ارسال پارامتر به 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 خروجی بگیرید.
sectionدسته بندی: آموزش کاربردی » PHP
related مطالب بیشتر:
» محدود کردن لینک دانلود مستقیم فایل ها با PHP و htaccess
» ساخت منوی هوشمند با PHP و CSS
» نمایش قسمتی از متن و پاراگراف با PHP
» نحوه نمایش متن و تصاویر اتفاقی در PHP و MySQL
» تبدیل تاریخ میلادی، شمسی با مبدل JDF در PHP
commentنظرات (۱۲۰ یادداشت برای این مطلب ارسال شده است)
more یادداشت های جدید بر اساس تاریخ ارسال در انتهای یادداشت های موجود نمایش داده می شوند.
نویسنده: reza
۱۷:۰۲ ۱۳۹۲/۱۰/۲۵
با سلام
آیا راهی وجود دارد که پس از بالا آمدن سایت و اجرای اسکریپت ها سایت به نمایش درآید؟
برای مثال آیا کدی فرضی شبیه زیر وجود دارد؟
<?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 تعیین کرد.
نویسنده: reza
۱۹:۵۶ ۱۳۹۲/۱۰/۲۵
با سلام
فرض کنید مثلا در یک سایت چند کد جاواسکریپت و یا .. است. وقتی که ما از کد زیر استقاده می کنیم
<?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 کنیم و بعد نمایش بدیم..." واضح نیست! وقتی محتوای یک سایت را دریافت می کنید، دقیقا مثل این است که آن را به فرض در دیتابیس داشته باشید.
نویسنده: reza
۱۷:۲۶ ۱۳۹۲/۱۰/۲۶
با سلام
کد زیر یکی از کد های آموزشی سایت خودتان راجع به آموزش آژاکس است.
<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 است!
نویسنده: reza
۱۸:۳۹ ۱۳۹۲/۱۰/۲۶
با سلام
لطفا مثالی بزنید که با تابع curl بتوان آدرس سایت خودتون
webgoo.ir/example/ajax/simple-ajax-form.html
رو نمایش بده یعنی ارسال آزاکسی بده و بعد زمان رو نشون بده.
با تشکر
پاسخ: 
سلام
چنین کاری به لحاظ امنیت سرور امکانپذیر نیست!
نمی توانید از دامنه خود به سرور سایت دیگر درخواست ارسال کنید (مگر اینکه سایت مقصد این اجاز را بدهد).
نویسنده: reza
۰۱:۱۶ ۱۳۹۲/۱۰/۲۷
با سلام
به نظر می رسد منظور من را از سوال های قبلی را درست متوجه نشده باشید !!!
شما فرض کنید کد زیر در یک وب سایت باشد
<script language="javascript" src="/team.js" type="text/javascript"></script>	
و مثلا تا زمانی که دکمه ای در کیبورد فشرده نشود کد بالا کار نکند و همچنین ممکن است این کد با کد های php هم ترکیب شده باشد.
حال ما وقتی بخواهیم با curl این سایت را به نمایش درآوریم باید چکار کنیم؟؟
و همچنین به جز مشکل بالا مشکل دیگری هم داریم.
با توجه به
"/team.js"
وقتی سورس سایت example.com را در سایت خود نمایش دهیم این کد به عبارتی خراب می شود.
پس در کل چطور باید کد های جاوا یا جاوااسکریپتی که فقط با رویداد حالتی مثلا زدن یک دکمه کار می کنند را با تابع curl نمایش داد؟؟
لطفا اگر امکان دارد کتابی جامع و کامل در زمینه curl معرفی کنید
با تشکر
پاسخ: 
سلام
مشکل کار نکردن کد به curl ارتباط (مستقیمی) ندارد! همان طور که در پاسخ به سوالات قبلی گفتیم، این متفاوت بودن آدرس صفحه است که منجر به عدم بارگذاری فایل ها با آدرس نسبی و در نتیجه از کار افتادن امکانات وابسته به آنها می شود (متاسفانه ظاهرا اطلاعات شما در زمینه مبانی وب کافی نیست)، اگر با نحوه کار آدرس دهی به صورت نسبی آشنا باشید، پاسخ سوالاتتان در موارد قبلی کاملا داده شده، در مورد کتاب باید عرض کنیم مبحث تابع curl به اندازه ای پیچیده نیست که برایش کتابی مجزا منتشر شود، شاید در قسمتی از کتاب های مربوط به آموزش PHP به این تابع اشاره ای شده باشد.
نویسنده: reza
۲۳:۱۳ ۱۳۹۲/۱۰/۲۷
با سلام
به نظر می رسد شما فکر می کنید که اطلاعات من در زمینه مبانی وب کافی نیست.
شاید حرف شما درست باشد!!!!!!
لطفا به سایت زیر بروید
http://worldometers.info
این سایت آمار و اطلاعات را زنده نمایش می دهد به وسیله ترکیبی از برنامه نویسی آژاکس و جاوا اسکریپت!
لطفا کدی را به من معرفی کنید که بتواند سایت بالا را در دامنه خودم نمایش دهد، چه با curl و چه با file_get_contents، فرقی نمی کند.
آن وقت منظورم را از تمامی سوالات بالا خواهید فهمید، این کار قطعا امکان پذیر است .
با تشکر فروان و سپاس فراوان به خاطر پاسخگویی به تمامی سوالات.
پاسخ: 
سلام
برای اینگونه موارد توابع سمت سرور مناسب نیستند، باید از روش هایی مانند iframe استفاده کنید:
<iframe src="http://www.worldometers.info" width="800" height="600" frameborder="0"></iframe>
راه حل دیگر این است که با تابع curl صفحه را به صورت مداوم از سایت اصلی دریافت ، در دیتابیس یا فایل ذخیره و سپس در صفحه خود یک کد آژاکسی داشته باشید که پاسخ دریافت شده توسط curl را (که در دیتابیس یا در یک فایل متنی ذخیره شده) فراخوانی کرده و در مرورگر نمایش دهد.
نویسنده: reza
۱۸:۴۸ ۱۳۹۲/۱۰/۲۸
با سلام
توضیحات شما کاملا درست است اما دریافت صفحه با تابع curl هیچ فایده ای ندارد زیرا همانطور که قبلا هم گفتم چیزی به عنوان آمار و ارقام در سورس سایت
http://worldometers.info
وجود ندارد که بتوان آن را ذخیره کرد.
به همین علت بود که همیشه از شما سوال می کردم که چطور باید خروجی سایت را ذخیره کرد نه سورس آن را!!!!!!
لطفا خودتان هم امتحان کنید تا متوجه منظور من بشوید.
این نکته را هم بگویم که ذخیره سایت بالا با browser ها مثلا فایرفاکس کاملا امکان پذیر است .
اما با curl فکر نکنم.
آیا هیچ راه حلی وجود ندارد که بتوان سایت را ذخیره کرد؟ (یعنی خروجی سایت نه سورس آن)
با تشکر
پاسخ: 
سلام
متوجه منظورتان هستیم اما کاری که شما می خواهید انجام دهید به سادگی امکانپذیر نیست، چون باید فایل های JS و CSS را به صورت جداگانه از DOM استخراج کنید که کار ساده ای نیست، در موارد اینچنین باید سورس ها را بررسی و لینکی که در پاسخ آن صرفا اعداد دریافت می شود را پیدا کنید و به آن درخواست curl بدهید (قاعدتا با انبوه کدهای موجود و پارامترهای به کار رفته در دستورات اسکریپتی سایت مورد نظر، خیلی ساده به نظر نمی رسد).
نویسنده: ali
۰۹:۲۳ ۱۳۹۲/۱۰/۳۰
سلام من در حال طراحی یک کنترل پنل برای سایت هستم که نسبتا تموم شده اما میخوام یه پنل دیگری طراحی کنم که کاربر بتونه ابزارهای که می خواد تو کنترل پنل بیاره مثلا عکس آیکون اسم آیکون و مسیرش تو سایت را بفرسته تو قسمتی از کنترل پنل که مشخص شده برای این کار باید چیکار کنم
چه کدی باید با php بزنم
پاسخ: 
سلام
لطفا از طرح سوالات کلی خودداری کنید!
پاسخ روشنی برای سوالتان وجود ندارد، باید گام به گام متناسب با سیستم مورد نظرتان کدنویسی کنید، به فرض اگر به آپلود نیاز است، باید بخشی برای این کار تعریف کنید (توابع مربوط به فایل، کار با متدها، آرایه ها و...)، در کل اگر برنامه نویس باشید می توانید مراحل را تعریف و کدهای هر قسمت را بنویسید و در قالب یک مجموعه به هم ارتباط دهید.
نویسنده: نیلوفر
۰۱:۵۳ ۱۳۹۲/۱۱/۰۱
سلام من از فرم ها استفاده کردم : یه مقداری رو وارد میکنم و اون میره در دیتابیس ذخیره میشه و سپس نمایش داده میشه.حالا میخوام وقتی اون مقدار رو وارد میکنم ، دیگه صفحه رفرش نشه و بلافاصله بعدش نمایش بده؟؟ میشه یه نمونه کد بهم معرفی کنید ؟؟ ممنون
پاسخ: 
سلام
به نظر باید از آژاکس (Ajax) بدین منظور استفاده کنید، لطفا به آموزش های مربوطه مراجعه کنید.
نویسنده: سینا
۱۲:۰۲ ۱۳۹۲/۱۱/۱۰
سلام و عرض خسته نباشید بابت سایت خوبتون میخواستم بدونم چطور میشه در فرم ثبت نام کاربران از وجود یا عدم وجود ایمیل کاربر اطمینان حاصل کرد که تقلبی نباشه
پاسخ: 
سلام
راهی برای تشخیص اینکه ایمیل کاربر واقعی است یا خیر وجود ندارد! تنها استفاده از قابلیت هایی مانند OpenID و آن هم در برخی سرویس دهنده های ایمیل ممکن است (که البته نیاز به ورود کلمه عبور از طرف کاربر دارد، لذا خیلی برای این مورد کاربردی نیست).
نویسنده: ali
۱۸:۱۰ ۱۳۹۲/۱۱/۱۲
سلام خسته نباشید من از تابع
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 باید در هاستتان فعال باشد.
نویسنده: محمد
۱۳:۱۴ ۱۳۹۲/۱۱/۲۲
سلام ممنونم از توضیحاتتان میشه یه راهنمایی بکنید محتویات این ادرس زیر را با curl چطوری میشه گرفت
تشکر فراوان و اگه میشه یک کم توضیحات بیشتر از curl درسایتتان بدهید چون وسعت این تابع خیلی زیاد است
http://cdn.tsetmc.com/Loader.aspx?ParTree=111C1116
و میشه یه راهنمایی کلی بکنید تا متوجه بشویم که چطوری شما curl را برای صفحات وب تعریف می کنید منظورم اینه که ما خودمون بتونیم کدی رو بفهمیم چطوری تعریف کنیم تا به مقصودمون برسیم
پاسخ: 
سلام
curl نمی تواند اطلاعات این صفحه را به طور کامل دریافت کند، چون خروجی صفحه با دستورات جاوا اسکریپت ایجاد می شود نه متن و HTML ساده، استخراج اطلاعات این صفحه نیاز به بررسی های دقیق و آزمایش و خطا دارد که کار تقریبا وقتگیری است.
نویسنده: کوشا
۰۰:۱۴ ۱۳۹۲/۱۲/۱۰
سلام
میشه یک فرم رو به یک URL خاص ارسال کنیم. چون من تو این زمینه واقعاً گیر کردم دیگه نمی دونم آیا راهی هست یا نه؟
شاید منظورم رو متوجه نشده باشید. من می خوام یک فرم را به آدرسی مثل
mysite.php?item=1&value=temp
بفرستم. نه به مثلاً صفحه ی
mysite.php 
من در حال ساخت یک CMS هستم. مثلاً تو یه قسمتی وقتی فرم رو پر می کنم باید ارسال بشه به یک صفحه ی کلاً مجزا و بعد درج بشه که البته این زیاد مشکل نیست مشکل اونجاست که مثلاً کاربر اگر یک فیلد رو پر نکنه باید به کاربر پیغام بدم که این رو پر نکردی که طراحی این قسمت اگر url صفحه بدون ؟ و اینها بود خیلی راحت بود البته یه راهی با سشن پیدا کردم که مثلاً هر چیزی رو که کاربر پر کرده دونه دونه تو سشن ببرم و بعد اگر هم یکی رو وارد نکرد اونی که وارد شده رو دیگه وارد نکنه و تو سشن داشته باشمش که توی Value فرمم echo کنم. زیاد نوشتم ببخشید.
فقط می خواستم بدونم آیا راهی جز این است یا خیر؟
خیلی ممنون
پاسخ: 
سلام
نمی دانیم دقیقا قصد طراحی چه ساختاری را دارید، اما این نوع موارد از روش های مختلف قابل انجام است، ساده ترین حالت این است که مقادیر ارسال شده را به صورت مستقیم با کدهای PHP در قسمت value فرم echo کنید (تا با ارسال مجدد فرم، دوباره ارسال شوند)، حالت دیگر استفاده از سشن یا کوکی است که در موارد خاص خود کاربرد دارد.
نویسنده: کوشا
۱۵:۲۷ ۱۳۹۲/۱۲/۱۱
با سلامی مجدد
فکر می کنم مشکلم با php-self حل شده باشه فقط نمی دونم آیا امنیت لازم را دارد یا خیر؟ چون همان طور که خودتان می دانید این کار باعث میشه که فرم به همون صفحه ارسال بشه و این کار من رو خیلی راحت کرد.
به نظر شما این کار امنیت لازم رو داره.
پاسخ: 
سلام
استفاده از
$_SERVER['PHP_SELF'];
به خودی خود هیچ مشکل امنیتی ایجاد نمی کند (این متغیر صرفا آدرس فایل را خروجی می دهد)، انتخاب های دیگر می تواند خالی گذاشتن قسمت action یا استفاده از
$_SERVER['REQUEST_URI'];
است.
نویسنده: مهران
۱۸:۰۲ ۱۳۹۲/۱۲/۱۷
درود بر شما.
من یه سوال داشتم
فرض کنید من یک رکورد حاوی مقادیری رو دارم و در بانک اطلاعاتی ذخیره می کنم.
اما این رکورد یک فیلد هم به نام فعال یا غیر فعال داره
که من میخوام بعد از پرداخت این فیلد متناسب با جواب سرور تغییر بکنه مشکلی که هست اینه که کاربر زمانی که فرم رو ثبت می کنه اطلاعات ثبت میشه و سپس به صفحه پرداخت منتقل میشه
با فرض اینکه پرداخت رو درست انجام بده ، سرور به من یه پارامتر میده که مثلا پرداخت انجام شد. اما متغیری که برای شناسایی رکورد به سمت سرور میفرستم خوب طبیعتا بر نمی گرده و من نمیتونم آیتم مورد نظر رو ویرایش کنم. از سشن هم استفاده کردم نشد. گویا به خاطر عدم دانش بنده است. لطف می کنین اگر جواب بدین
پاسخ: 
سلام
در سیستم های پرداخت معمولا امکان تنظیم یک لینک بازگشتی وجود دارد، در این لینک بازگشتی می توانید به فرض id مربوط به کاربر را (برای امنیت بیشتر) رمزنگاری کرده و به عنوان یک پارامتر ارسال و پس از پرداخت دریافت کنید (و در سرورتان حالت رمزی را به حالت معمولی تبدیل کرده و از سایر پارامترها برای موارد مد نظر استفاده کنید).
همچنین در این روش به جای رمزی کردن می توانید سشن id را به عنوان کد شناسایی کاربر به درگاه ارسال کرده و به عنوان پارامتر بازگشتی دریافت کنید.
more لطفا پیش از ارسال یادداشت نکات زیر را مد نظر داشته باشید:
- مواردی که به کلی خارج از موضوع این مطلب هستند را در فرم منوی "تماس با ما" مطرح و پاسخ را از طریق ایمیل دریافت کنید.
- به سوالات کلی، مبهم، غیرضروری و مشکلاتی که تلاشی برای رفع آن نکرده باشید پاسخ کوتاه و مختصر داده خواهد شد!
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین قرار دهید تا امکان تست و بررسی وجود داشته باشد.
- تمام یادداشت ها بررسی و برای هر کاربر زمان مشخصی جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.





2 × 3
 refresh
آخرین دیدگاه ها
more برای دسترسی سریع به یادداشت مربوطه می توانید از لینک مطلب در کادر زیر استفاده کنید.
form نبی
در:
‏asc و desc رو جابجا نوشتی
۱۳۹۹/۰۷/۰۴

form ساناز محمدی
در:
سلام مرسی از کدی که گذاشتید ♥
۱۳۹۹/۰۷/۰۳

form mahtab
در:
سلام خسته نباشین ببخشید میخواستم بپرسم که چجوری میتونیم یه کلیپ رو از کامپیوتر از انیستا دانلود کنیم ؟؟ اها اینم بگم...
۱۳۹۹/۰۷/۰۲

form سعید
در:
سلام دستتون درد نکنه از پروژه شما استفاده کردم فقط یه مشکل اگه در یک صفحه دو تا لیست کشویی داشته باشیم چطوری...
۱۳۹۹/۰۷/۰۱

form Iman Mafakheri
در:
سلام من یه قالب خارجی اوردم راست چینش کردم حتی فونتشم تغییر دادم اما متاسفانه وقتی متن فارسی مینویسم حروف رو جدا جدا مینویسه نمیدونم...
۱۳۹۹/۰۶/۳۰

form میثم صدیق
در:
سلام برای اضافه کردن یک المان با (append) من یک کلید گذاشتم اضافه میشه ولی با هر بار کلیک کردن اضافه میشود اگر بخواییم یک...
۱۳۹۹/۰۶/۲۹

form amin
در:
سلام و خسته نباشید می خواستم Slash ( / ) رو به صورت اتوماتیک از تمامی URL ها حذف کنم البته با کمک htaccess...
۱۳۹۹/۰۶/۲۵

form محمد
در:
سلام وقت بخیر من یه همچین کدی دارم میشه لطفا راهنمایی کنید مشکلش چیه؟ سپاسگزارم
۱۳۹۹/۰۶/۲۴

form سروش
در:
سلام . من اطلاعات را از دیتابیس دریافت میکنم و در جدول میبینم . میخوام مثلا 6 مورد آخر را در یک ردیف ببینم و...
۱۳۹۹/۰۶/۲۳

form Behdad kanani
در:
سلام اصلا نمی شه اینکارو انجام داد
۱۳۹۹/۰۶/۲۲

form جعفری
در:
سلام قبل از تبدیل تاریخ نوشتید مثلا خب این مقدار تاریخ برای من در دیتابیس در جدولی بنام startedtm بصورت یونیکس...
۱۳۹۹/۰۶/۲۰

form احمد
در:
با عرض سلام و خسته نباشید ببخشید برای فایل دانلودی باید از چه دستوری استفاده کنم فایل با پسوند pdf رو میخوام بزارم اگر امکانش...
۱۳۹۹/۰۶/۲۰

form شیما
در:
سلام آیا وقتی در قسمت وبلاگ دوستان وبلاگی رو ثبت میکنیم صاحب وبلاگ با استفاده از برنامه های خاصی میتونه متوجه بشه ؟
۱۳۹۹/۰۶/۱۹

form mahtab
در:
سلام خسته نباشین من نمیدونم چرا مدیریت وبم برام باز میشه اما وقتی میزنم مشاهده وب رو میزنم نمیاره واسم فقط امیدوارم هک...
۱۳۹۹/۰۶/۱۸

form ساناز محمدی
در:
سلام دوباره این ساب دامین بنده هست اگر یکی از مطالب را مشاهده کنید هر محصولی که ارسال شده داخل از طریق مدیریت یک...
۱۳۹۹/۰۶/۱۷
form محسن
در:
سلام و عرض ادب مجدد کد زیر هم کار نمیکنه مشکل چی میتونه باشه ؟!
۱۳۹۹/۰۶/۱۶
form ساناز محمدي
در:
سلام بنده یه ساب دامین دارم با دامنه شخصی حالا داخل این ساب دامین طرف آدرس سایت خودش رو داخل ساب دامین بنده میذاره مثلآ...
۱۳۹۹/۰۶/۱۶
form محسن
در:
سلام و عرض ادب لطفا راهنمایی کنید مشکل کد زیر چیه
۱۳۹۹/۰۶/۱۶
form احمد
در:
با عرض سلام ببخشید من با دستور append میخوام یه سطری رو به سبدم اضافه کنم ولی چطوری باید داخل append تگ ها رو بنویسم...
۱۳۹۹/۰۶/۱۵
form احمد
در:
با عرض سلام مجدد و خسته نباشید ببخشید طبق فرمایش شما من قبل از دستور else دستور if را نوشته بودم تا جایی که اطلاع...
۱۳۹۹/۰۶/۱۴
form احمد
در:
با سلام ببخشید طریقه استفاده از دستور else در ایجکس به چه صورت هست ایا باید دوباره فانکشن دان رو در هنگام شرط گذاشتن بزارم....
۱۳۹۹/۰۶/۱۳
form مجتهد
در:
سلام ابتدائا از سایت مفیدتون تشکر می کنم. من خیلی از آموزه هام رو از سایت شما یاد گرفتم. یه سوال دارم...
۱۳۹۹/۰۶/۱۳
form محمد حسین
در:
سلام لینک های من وقتی کلیک شوند اررور 404 تولید میکنند. علت چیست؟
۱۳۹۹/۰۶/۱۱
form حسین
در:
سلام بر شما و با تشکر از سایت خوبتون. من ابتدا با تابع mail پیش رفتم و یک if ایجاد کردم که اگر ایمیل...
۱۳۹۹/۰۶/۱۰
form mehdi
در:
خطای -22 مربوط به چیه؟
۱۳۹۹/۰۶/۱۰
  در انتظار بررسی: ۰
 پاسخگویی به سوالات ممکن است تا 24 ساعت زمان ببرد.