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

Saturday, September 13, 2025 GMT +3:30

استفاده ترکیبی از جاوا اسکریپت (JavaScript) و PHP

php

همان طور که می دانیم جاوا اسکریپت (JavaScript) به عنوان یک زبان اسکریپت نویسی سمت کاربر و قابل اجرا در مرورگرها به خودی خود فواید و کاربردهای زیادی در صفحات وب دارد و تقریبا تمام برنامه نویسان و توسعه دهنده گان از آن استفاده می کنند، اما در کنار این کاربردها مواردی پیش می آید که بخواهیم از قدرت و قابلیت های آن برای نمایش محتوای داینامیک سمت سرور و به طور خاص در تعامل و ترکیب با PHP استفاده کنیم، این شیوه یکی از معمول ترین روش هایی است که بیشتر سایت های خدمات دهنده در زمینه ابزارهای وبلاگ نویسی برای کوتاه کردن کدهای نهایی و خیلی فواید دیگر از آن استفاده می کنند، از این رو و به جهت اینکه پرسش های زیادی از طرف کاربران در این خصوص مطرح می شود، قصد داریم این آموزش را به نحوه استفاده ترکیبی از جاوا اسکریپت (JavaScript) و PHP اختصاص دهیم.

هدف از ترکیب JavaScript و PHP


پیش از اینکه به ادامه آموزش بپردازیم بد نیست در یک جمع بندی کلی با هدف از تکنیک استفاده ترکیبی جاوا اسکریپت (JavaScript) و PHP آشنا شویم.
شرایطی که باعث می شود از جاوا اسکریپت و PHP به صورت ترکیبی استفاده کنیم اغلب به مواردی مربوط می شوند که بخواهیم به طور مثال محتوای داینامیک خروجی داده شده توسط کدهای PHP را به صورت فریم در صفحات HTML نمایش دهیم، به طور مثال فرض کنید فایل PHP با آدرس زیرپیج رنک سایت مورد نظر را محاسبه و به صورت آیکن نمایش می دهد.
http://www.yoursite.com/page_rank.php?url=$url&img=5
واضح است که اگر مقدار متغیر url درج شده در کد بالا را به صورت دستی تنظیم و این آدرس فرضی را در نوار آدرس مرورگر وارد کنیم احتمالا آیکن پیج رنک به نمایش در می آید، اما مشکل ما اجرای این کار به صورت خودکار و در صفحات وب است که امکان درج و اجرای مستقیم دستورات PHP در صفحات HTML وجود ندارد و از طرفی تمام و شاید اغلب کاربران این امکان را ندارند که از دستورات سمت سرور در وبلاگ ها استفاده کنند و محتوای فایل PHP را نمایش دهند، به همین خاطر باید به دنبال یک واسطه بین فایل های داینامیک PHP و صفحات استاتیک HTML باشیم، این واسطه چیزی نیست جزء دستورات زبان جاوا اسکریپت (JavaScript) که به راحتی می توان به کمک آن و تنها با چند خط کدنویسی ساده به هدف مورد نظر رسید و کد نهایی را به شکل نمونه زیر تغییر داد.
<script type="text/javascript" src="http://yoursite.com/page_rank.php?url=$url&img=5"></script>
اکنون می توان کد اسکریپتی بالا را در صفحات HTML به راحتی استفاده کرد، این روش جایگزین مناسبی است برای تکنیک های مشابه (مانند استفاده از iframe و...)، اما مراحل انجام این کار.

فراخوانی فایل PHP در JavaScript


اولین گام این است که آدرس فایل PHP خود را در قسمت src تگ های جاوا اسکریپت آدرس دهی کنیم، البته اگر تعداد فایل های سمت سرور بیش از یک مورد باشد، فایلی باید در این قسمت تنظیم شود که خروجی را تولید می کند و نیازی به وارد کردن سایر فایل ها درون دستورات جاوا اسکریپت نیست، به مثال زیر توجه کنید.
<script type="text/javascript" src="http://yoursite.com/output.php"></script>
نکته 1: اگر فایل سمت سرور (فایل PHP) نیاز به دریافت پارامترهایی داشته باشد، مانند متد GET در حالت عادی، می توانیم پارامترها را با افزودن علامت ? به انتهای آدرس و استفاده از علامت های & و =، به هر تعداد که لازم است تنظیم کنیم.
نکته 2: استفاده از این روش محدود به لینک های داینامیک نیست، درواقع با هر لینکی که فایل سرور به درستی توسط آن فراخوانی شود، خروجی دریافت شده و به نمایش در می آید.

تنظیمات JavaScript در فایل PHP


در گام دوم و در فایل PHP، باید خروجی کدها را مطابق با syntax دستور document.write تنظیم کنیم، همان طور که می دانیم یک دستور ساده document.write در جاوا اسکریپت به صورت زیر است:
<script type="text/javascript">
document.write('چاپ خروجی مورد نظر در مرورگر');
</script>
لذا وقتی این دستور را در کدهای PHP استفاده می کنیم باید به نکات زیر توجه داشته باشیم.
- درج موارد مربوط به document.write درون تگ های PHP مجاز نیست و باید خارج از علامت های php?> و ?> باشد.
نمونه اشتباه:
<?php
document.write('echo "ترکیب جاوا اسکریپت و PHP";');
?>
نمونه صحیح:
document.write('<?php
echo "ترکیب جاوا اسکریپت و PHP";
?>'
);
- به جهت رعایت syntax صحیح و مطابق با دستور العمل جاوا اسکریپت، علامت های ' و " در خروجی را با یک بک اسلش (\) ایمن سازی می کنیم، دقت کنید که در برخی سرور ها به جهت روشن بودن قابلیت magic_quotes_gpc (این قابلیت علامت های ' و " را با افزودن یک بک اسلش ایمن سازی می کند)، این کار به صورت خودکار انجام می شود و لذا ابتدا باید این قابلیت را غیر فعال کنید یا بک اسلش های اضافه شده را حذف نمائید تا از درج دو بک اسلش (یک بک اسلش توسط magic_quotes_gpc و یک بک اسلش دیگر توسط توابعی مانند addslashes) اجتناب شود، نمونه راه حل زیر می تواند هر دو مشکل را بر طرف کند.
document.write('<?php
//تابعی برای حذف بک اسلش های اضافه
function GpcClean($str){
    if(get_magic_quotes_gpc()){
        return stripslashes($str);    
    }
    return $str;
}
//افزودن بک اسلش به خروجی
echo addslashes(GpcClean("ترکیب جاوا اسکریپت و PHP"));
?>'
);
ملاحظه می کنید که برای بررسی روشن بودن قابلیت magic_quotes_gpc از تابع get_magic_quotes_gpc استفاده کرده ایم، اگر این قابلیت روشن باشد (مقادیر برگردانده شده توسط تابع get_magic_quotes_gpc برابر با TRUE بود)، مقادیر خروجی از فیلتر تابع stripslashes عبور کرده و بک اسلش های زائد حذف می شوند، در نهایت نیز با تابع addslashes، هر جا علامت ' یا " در خروجی وجود داشته باشد به صورت '\ و "\ تبدیل می شوند تا مطابق با syntax دستورات جاوا اسکریپت باشند.
نکته: استفاده از خط جدید (line break) در خروجی، مجاز نیست و موجب از کار افتادن نمایش کد می شود، به عبارت دیگر نباید از حالت Enter در خروجی کدهای PHP در ترکیب با جاوا اسکریپت استفاده شود.
دسته بندی: آموزش کاربردی » JavaScript
related مطالب بیشتر:
ساخت پنل چند سربرگی (Tabbed Panel) با جاوا اسکریپت و CSS
نمایش کادر پیام شناور در سایت و وبلاگ با جاوا اسکریپت
نمایش پیام در حال بارگذاری با جاوا اسکریپت (JavaScript)
اعتبارسنجی فرم های وب با جاوا اسکریپت (JavaScript)
چگونه لوگوی حمایتی برای نمایش در سایت یا وبلاگ بسازیم؟
دیدگاه
more ۸۵ دیدگاه برای این مطلب ارسال شده است.
more چینش دیدگاه ها به ترتیب از جدیدترین به قدیمی ترین است.
مهدی
۱۳:۲۲ ۱۳۹۳/۰۱/۲۳
با تشکر از پاسختان
حق با شماست، بنده هم نظرم این نیست! حقیر می خواهم از php فقط به عنوان واسطه استفاده کنم به این ترتیب که در تگ head با استفاده از جاوا اسکریپت به صفحه ی php که اطلاعات دیتابیس دارد، ارجاع دهم و سپس در بخش body و باز هم با استفاده از جاوا اسکریپت، تعداد کلیک ها را روی به روی لینک ها چاپ کنم؛ ذستورات شما را تا حد امکان اجرا کردم اما موفق نشدم. می خواهم همه ی این کارها در صفحه ی html انجام شود و الا در صفحه ی php این کار بسیار ساده است.
با تشکر مجدد
ارسال درخواست از صفحات سمت کاربر به فایل های سمت سرور یا باید به صورت مستقیم (فراخوانی فایل PHP) باشد، یا از طریق یک واسطه که قادر به ارسال درخواست به سرور باشد، این واسطه نیز تنها Ajax است، یعنی با صرف جاوا اسکریپت چنین کاری شدنی نیست، مگر اینکه از طریق PHP برای توابع آن مقادیر اولیه چاپ کنید که باز در این حالت باید فایلتان PHP باشد.
مهدی
۱۴:۳۵ ۱۳۹۳/۰۱/۲۲
با سلام و تشکر از شما
بنده می خواهم تعداد کلیک ها را که در دیتابیس ذخیره شده است، رو به روی لینک ها در یک صفحه ی html نمایش بدهم بدون این که لازم باشد، صفحه را به صورت php ذخیره کنم. ایده های شما را برای این کار استفاده کردم، اما موفق نشدم؛ اگر لطف بفرمایید و بنده را راهنمایی کنید که چگونه می توانم با استفاده از کدهای جاوا اسکریپت در داخل صفحات html این کار را انجام دهم، ممنون خواهم شد؛ البته می خواهم از ajax استفاده نکنم.
با تشکر مجدد.
سلام
به هر صورت باید به یک طریقی اطلاعات از سمت سرور گرفته شود، نمی شود که نه از PHP استفاده کرد و نه از واسطه ای مثل Ajax، راه حل دیگری وجود ندارد!
نکته: به نظر بیشتر مشکل شما با وجود پسوند php در آدرس صفحات است که برای مخفی کردن این مورد باید از URL Rewrite در htaccess استفاده کنید، به طور مثال صفحات سایت حاضر به PHP است، اما اثری از این عبارت در URL ها نمی بینید!
امیرعلی
۰۸:۳۱ ۱۳۹۲/۱۲/۰۵
تشکر از اینکه جواب دادی
من با 4 مرورگر معروف تست کردم جواب نداد
ولی احتمالا همون طوری که شما اشاره کردی تمام دستورات رو اجرا نمی کنه به هر حال ممنون
خیلی آقایی
۲۳:۰۲ ۱۳۹۲/۱۲/۰۳
سلام با تشکر از سایت خوبتون خیلی کامله
راستش من زیاد از این جاوا سر در نمیارم ولی یک سوالی چند وقتی هست تو ذهنم اومده که شاید اشتباه باشه نمیدوم........... اما سوال من اینجاست که مثلا کدهای جاوا اسکریپت در یک سایت وجود دارد که ما وقتی کلیک می کنیم دستورات رو برای ما اجرا میکنه به عنوان مثال باز کردن یک چت خصوصی یا اطلاعات یک قسمت یا هر چیز دیگه
که من میخوام بدونم میشه یک اسکریپت رو توی نوار مرورگر نوشت یا کپی کرد که همون کار رو برای ما انجام بده؟؟؟؟
اگه میشه چطوری به عنوان مثال برای باز کردن چت خصوصی بدون کلیک کردن در سایت و با وارد کردن کد جاوا چطور میشه این کارو کرد من یک کد دست و پا شکسته میزارم نمیدونم اصلا درست هست یا نه یا باید این کد بعد از آدرس سایت قرار بگیره یا جایی از کد ناقص هست که عمل نمی کنه اگه میشه راهنمایی کنی ممنون میشم.
اینم کد
onclick="privateChat('308579'); return false;">
که در اصل این کد کامل از این آی دی هست ک توسط فایرفاکس در آوردم
onclick="privateChat('308579'); return false;">
که در اصل این کد کامل از این آی دی هست ک توسط فایرفاکس در آوردم
<div id="onlineUsers" class="aside-content"><a href="#" onclick="UserInfo('308579'); return false;"><img src="App_Themes/Paper/icon-info.png" border="0"></a>           <a href="#" class="user_thumb"><img src="images/avatar/111.png"></a>        <a href="#" class="context-menu-target" data-userid="308579" onclick="privateChat('308579'); return false;">    <span class="Supervisor">ali.76</span></a>        <a id="webcam308579" href="#" style="display:none"><img src="Styles/webcam.png"></a>        <div id="308579" class="UserInfo" style="display:none"></div>
ممنون
سلام
هر چند اجرای برخی دستورات جاوا اسکریپت از طریق نوار آدرس مروگر امکانپذیر است، اما این روش استاندارد نیست و در برخی مرورگرها پشتیبانی نمی شود و در ضمن تنها در موارد محدودی عمل می کند، به نظر فراخوانی آدرس به صورت زیر، تابع مد نظر شما را اجرا می کند:
yoursite.com/#privateChat('308579');
۰۲:۲۲ ۱۳۹۲/۱۱/۱۳
با سلام
چرا نمیشه از دستور document.write درون یک تابع استفاده کرد.
مثلا به کد زیر دقت کنید
<html>
<body onkeypress="reza('result');">
<div id="result"></div>
<script type="text/javascript">
function reza(id){
document.getElementById(id).innerHTML = '&lt;?php echo "hi" ?&gt;';
}
</script>
</body>
</html>
کد بالا می گوید با فشردن هر کلیدی تابع شروع به کار کند
اما با فشردن کلید تابع بی شمار بار کار می کند
یعنی مرورگر به طور دایم در حال لود شدن است.
مشکل چیست؟
راه حل چیست؟

با تشکر
سلام
ظاهرا امکان استفاده از دستور document.write در رویداد onkeypress وجود ندارد، از حالت اصلاح شده (بالا) استفاده کنید.
۲۳:۱۳ ۱۳۹۲/۱۱/۰۷
با سلام
شما درست میگید که آژاکس برای اینکار درست نشده ، اما تنها راهی رو که میشه به صورت زنده اطلاعات رو منتقل کرد آژاکسه!!!!!؟؟؟!!!!
آیا راهه دیگه ای برای تبادل زنده اطلاعات وجود داره؟؟
مثلا در پخش زنده تلویزیون از
streamer=rtmpt
استفاده می کنند.
لطفا راجع به این مباحث هم توضیح بدید لطفا.
سلام
بحث انتقال دیتای متنی با انتقال دیتای صوتی تصویری با هم متفاوت است، برای حالت اول Ajax کاربرد دارد اما برای مورد دوم باید از live stream و برنامه ای متناسب با آن (که معمولا با فلش ساخته می شود) استفاده کنید (این موضع خیلی ساده نیست و باید در زمینه کدنویسی فلش مسلط باشید)، اطلاعات بیشتر:
http://webdesign.about.com/od/streamingmedia
۱۷:۲۳ ۱۳۹۲/۱۱/۰۷
با سلام
من می خوام به طور آنلاین صدا خودم رو توی اینترنت پخش کنم
آیا راهی وجود داره؟؟
وقتی با آژاکس میشه آمار و اطلاعات رو به طور زنده نمایش داد پس میشه آهنگ رو هم به صورت زنده پخش کرد .
اما نیاز هست که آهنگ تبدیل رشته بشه و بالعکس.
آیا شما کدی رو برای تبدیل آهنگ به رشته سراغ دارید؟
لطفا کمکم کنید
مرسی
سلام
Ajax برای این کار ساخته نشده! باید از فلش استفاده کنید!
۰۰:۱۷ ۱۳۹۲/۱۱/۰۷
با سلام
آیا میشه با جاوا اسکریپت یا php یا ajax صدا فرد رو ضبط کرد؟؟
البته بدون نرم افزار و درون اینترنت و وب.
لطفا یک کد برای مثال بیاورید.
سایت های بسیاری هستند که چنین کاری رو انجام میدند
برای مثال
http://online-voice-recorder.com
واقعا جالب و عالیه.
اما یک کد می خوام که بتونم به راحت ترین شکل صدای فرد رو ضبط کنم.
لطفا کمکم کنید
مرسی
سلام
این کار در وب باید از طریق فرمت فلش انجام شود که خود نیاز به داشتن آشنایی با زبان ActionScript و نرم افزار Adobe Flash دارد (سایت مذکور نیز از فلش استفاده می کند).
nima
۱۰:۴۵ ۱۳۹۲/۱۰/۲۲
سلام ، بلاخره تونستم پیدا کنم ، ممنون ( مربوط به سوال ، رویداد زمان خروج از مرورگر )
nima
۲۳:۵۷ ۱۳۹۲/۱۰/۲۱
سلام ممنون بابت پاسختون
چطوری میتونم توسط آژاکس فقط یه صفحه پی اچ پی رو فقط فراخوانی کنم بدون ارسال و دریافت پارامتر ، فقط میخوام که دستورات صفحه فراخوانی شده اعمال بشه ، خواهشن کمک کنید ، خیلی دنبالش گشتم جایی نتونستم پیداش کنم .
سلام
اگر با نحوه کار آژاکس آشنا باشید، می توانید با استفاده از متد GET یا POST بدون ارسال پارامتر، صرفا یک درخواست به فایل PHP بفرستید.
nima
۲۱:۲۱ ۱۳۹۲/۱۰/۲۰
سلام
برای اینکه در سایت آنلاین یا آفلاین بودن کاربر رو مشخص کنیم ، یه دستور با جاوا اسکریپت که رویداد موقع خروج از مرورگر رو اجرا میکنه ، که موقع خروج با آپدیت دیتابیس این رو مشخص می کنیم ، سوال من اینکه که چطوری به جای دستور alert کد php رو اجرا کنیم ، البته کد رو که جایگزین می کنم بدون در نظر گرفتن شرط اجرا میشه ،
  window.onbeforeunload = confirmExit;
function confirmExit()
{

//code

}
سلام
این روش استاندارد و صحیحی نیست! جاوا اسکریپت یک زبان اسکریپت نویسی سمت کاربر است، خروج کاربر باید با فراخوانی یک کد در سرور انجام شود، البته این فراخوانی می تواند به شیوه Ajax (و ترکیب جاوا اسکریپت و PHP) نیز انجام شود، برای کسب اطلاعات بیشتر به آموزش های بخش Ajax مراجعه کنید.
نکته: در صورتی که می خواهید پس از بستن مرورگر توسط کاربر نشست او به پایان برسد، باید مدت اعتبار session را برای همان جلسه تنظیم کنید (رجوع به آموزش کار با سشن در PHP).
۱۴:۰۶ ۱۳۹۲/۱۰/۰۶
سلام.
من یک فایل ایجوری می خوام درست کنم برای ابزار جستجوی سایتم .
اما توی نمونه ها دیدم که 3 تا echo استفاده شده .
echo اول که با "باز و بسته شده و استایل و ... توش قرار داده شده.
echo دوم که echo توش نیست و فقط یک خط کد توش هست.
echo سوم که باز با "باز و بسته شده و سلکتور با </a></div> بسته شده .
خواستم بدونم کدهای خودم را باید کجاش بزارم .
کد های من 12 خط هست.
سلام
هر چند منظورتان از نمونه ها مشخص نیست! به هر صورت آنچه لازم بوده در آموزش توضیح داده شده، اینکه چند echo و... استفاده شود مهم نیست، مهم این است که خروجی نهایی مطابق با syntax دستورات در جاوا اسکریپت باشد (درک دقیق این مسئله نیازمند داشتن تجربه قبلی در کدنویسی جاوا اسکریپت است).
مرتضی
۱۱:۱۳ ۱۳۹۲/۱۰/۰۳
ضمن تشکر از مطالب خوب شما
برای ارسال فایل ضمیمه در ایمیل از php دارم استفاده می کنم. می خوام در صورتی که فرمت فایل ضمیمه موارد آرایه
$format
نبود اون وقت به جای پیغام زیر:
فایل ضمیمه شده مجاز نمی باشد. تنها فرمتهای
با جاوا اسکریپت همین پیغام رو نشون بده.
$formats = array('jpg','gif','png','jpeg','bmp');
// بررسی فرمت فایل ضمیمه
$ext = end(explode('.',$file_name));
if(!in_array($ext,$formats)){
echo"فایل ضمیمه شده مجاز نمی باشد.تنها فرمتهای ";
}
می توانید خروجی را به صورت نمونه زیر چاپ کنید:
<?php
if(!in_array($ext,$formats)){
echo "<script type=\"text/javascript\">alert('فایل ضمیمه شده مجاز نمی باشد.تنها فرمتهای');</script>";
}
?>
amir
۰۰:۴۳ ۱۳۹۲/۰۵/۲۹
درود بر شما و با تشكر از مطالب مفيد ي كه بدون چشم داشت به كاربران ارائه مي دهيد. من يك در خواست داشتم اميد است بتوانيد در اين مورد كمك كنيد:
در اسكريپت تبادل بنر softbiz banner ehchange ، كدي كه كاربران بايد در سايت خود قرار دهند به صورت iframe مي باشد ، حال اگر بخواهيم كد مورد نظر به صورت javascript باشد ( به خاطر اينكه بعضي از سيستم هاي وبلاگدهي كدهاي iframe را را قبول نمي كنند)، چگونه بايد كدها را تغيير داد ، ممنون ميشم اگر در اين مورد كمكم كنيد بسيار ضروري است.
کدهایی که به صورت iframe هستند معمولا حاوی مقادیر زیادی خروجی به صورت HTML می باشند لذا نمی توان خروجی را مستقیم در جاوا اسکریپت قرار داد، برای برخی از سیستم ها می توان تگ iframe را با جاوا اسکریپت درج کرد، مثال:
<script type="text/javascript">
var src = 'http://webgoo.ir';
var output;
output = '<if';
output += 'rame src="' + src;
output += '" width="300" height="200" frameborder="0"></if';
output += 'rame>';
document.write(output);
</script>
این روش تنها در برخی موارد کاربرد دارد، اما برای سیستم هایی مانند بلاگفا که محدودیت های دست و پا گیر زیادی دارند و علاقه زیادی به مچ گیری از کاربران، چاره عملی وجود ندارد، بهترین کار استفاده نکردن از اینچنین سرویس هایی است!
نکته: فراخوانی کدها می تواند از طریق قرار دادن آنها در یک فایل js و به صورت href نیز باشد.
۲۰:۱۱ ۱۳۹۲/۰۴/۳۱
با عرض سلام و خدا قوت خدمت شما؛
ابتدا باید از سایت آموزنده و بسیار خوبتون تشکر کنم و براتون آرزوی موفقیت و سربلندی داشته باشم (إن شاء الله که بیش از پیش موفق باشید).
درباره 2 سؤال مزاحمتون میشم :
سؤال 1 :
بنده با استفاده از راهنمایی‌های شما برای ساخت RSS Feed Reader و همچنین تجربیاتی که درباره برنامه‌نویسی php داشتم، تونستم یه Feed Reader برای نمایش آخرین مطالب وبلاگ کلاسی خودمون بسازم (در قسمت بالای همه مطالب :
www.mums89.ir
با توجه به اینکه میهن‌ بلاگ اجازه استفاده از تگ iframe رو نمیده، مجبور شدم با استفاده از روشی غیرمستقیم، Feed Reader رو فراخوانی کنم :
http://www.stunet.ir/services/feed_reader/iframe.php?src=http://www.stunet.ir/services/feed_reader/feed_reader_3_1.php&height=550
).
منتهی برای نمایش دادن محتوای این Feed Reader، از روش iframe استفاده کردم و هر کاری کردم نتونستم از روش document.write استفاده کنم، چون همون‌ طور که توضیح داده بودید، به دلیل وجود line break در کد، امکان نمایش محتوا مختل خواهد شد.
سؤال بنده اینجاست که آیا راهی هست که بدون استفاده از iframe (با توجه به دست و پا گیر بودن این روش)، محتوای RSS رو نمایش داد؟
اگه روش document.write مد نظره، آیا امکان داره new line ها رو با استفاده از تابع str_replace، با <br> جایگزین کرد؟ یا به کار گرفتن تابعی شبیه به تابع trim؟ (چون قصد ندارم برخی فضاهای خالی به کار رفته در متن آخرین مطالب وبلاگ با استفاده از تابع trim از بین برن)
یا اگه راه حل دیگه‌ ای مد نظرتون هست بفرمایید.
اما سؤال 2 :
در ابتدا عذر می‌خوام اگه این سؤالم کمی با این مطلب نمی‌خونه، چون مطلب مرتبط دیگه‌ای برای پرسیدن این سؤال پیدا نکردم.
فرض کنید بنده ابزاری رو برای وبلاگ‌ها و وب‌ سایت‌ها توسط سایت خودم ارائه کنم (مثلاً همین Feed Reader رو با کمی بهینه‌سازی و افزایش انعطاف‌پذیری، به صورت ابزار ارائه کنم یا ابزار دیگه‌ ای مثل «رتبه‌بندی ستاره‌ ای» مطالب و ...).
سؤال بنده اینجاست که آیا راهی هست که بشه فهمید چه وبلاگ یا سایتی از ابزار مورد نظر ما استفاده می‌کنه (به طور خاص، برنامه‌ نویسی php رو در نظر دارم)؟
و تنها در صورتی که کاربر، وبلاگ یا سایت خودش رو در سایت ما ثبت‌ نام کرده باشه، اجازه استفاده از ابزار و نمایش اون رو به کاربر بدیم (با بررسی و چک کردن اینکه وبلاگ یا سایت کاربر در database ثبت شده)؟
درباره هر کدوم از سؤالات، اگه فقط اشاره‌ای اجمالی هم داشته باشید و بفرمایید که باید دنبال چه عنوان (title) هایی بگردم هم ممنون خواهم بود و نیازی به توضیح بیشتر و به زحمت افتادن شما نیست؛ ولی اگه علاوه بر اشاره به روش کار، توضیح مختصری هم بفرمایید، لطف مزیدی از جانب شما خواهد بود.
می‌بخشید اگه سرتون رو درد آوردم.
حق یار و نگهدارتون.
در مورد سوال اول:
نمایش خروجی کدهای PHP در سایر صفحات HTML به طور معمول از دو طریق iframe یا document.write امکانپذیر است، حالت اول چون حساسیت کمتری (از نظر Syntax) دارد، برای خروجی های طولانی و چند خطه مناسب است، اما حالت دوم (document.write) نیاز به رعایت اصول خاصی دارد و با کوچک ترین اشتباه از کار می افتد، لذا برای گرفتن خروجی های کوچک کاربرد دارد، از طرفی همان طور که اشاره کردید، برخی سرویس ها اساسا امکان استفاده مستقیم از برخی تگ ها را نمی دهند و به ناچار باید آنها را به نوعی دور زد (همان کاری که کرده اید)، نتیجه اینکه راه دیگری برای حل مشکل شما به ذهن نمی رسد (این روشی است که خیلی از سایت های ارائه کننده ابزارهای وبلاگ نویسی نیز از آن استفاده می کنند).
در مورد سوال دوم:
زمانی که یک فایل PHP (فایل ابزار) فراخوانی می شود، یک سربرگ HTTP به سرور ارسال می شود که (معمولا) یک قسمت آن شامل آدرس سایت ارجاع دهنده است، در PHP این آدرس ارجاع با
$_SERVER['HTTP_REFERER']
قابل دریافت است، لذا:
<?php
$valid_domains = array(
'webgoo.ir',
'google.com'
);

$valid = FALSE;

foreach ($valid_domains as $domain){
if(preg_match("@https?://$domain/.*@", @$_SERVER['HTTP_REFERER'])){
$valid = TRUE;
}
}
if ($valid){
echo "OK!";
}
else{
echo "Error!";
}
?>
البته این کد در بیشتر موارد و برای اغلب کاربران کافی است، اما چون امکان تغییر REFERER برای کاربران حرفه ای وجود دارد، بهتر است از دستورات htaccess (هرچند به شکل دستی) استفاده کنید:
<Files script.php>
order deny,allow
deny from all
allow from domain1.com
allow from domain2.com
</Files>
more لطفا پیش از ارسال دیدگاه نکات زیر را مد نظر داشته باشید:
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.



 refresh
10 × 10
9 × 2
20 × 20
=