استخراج کل url های یک صفحه توسط php

  • آپدیت شده در تاریخ

استخراج url سایت

استخراج کل url های یک صفحه  از سایت برای موارد زیادی استفادهمی شود  . ساخت نقشه سایت (sitemap) از آدرس url سایت یکی از اینموارد است . شما می توانید به راحتی همه url های یک صفحه را توسط php استخراج کنید . در این آموزش به شما کد php کوتاه و ساده برای استخراج کل url های یک صفحه توسط php ارایه دادیم.

کلاس DOMDocument در PHP کاربردهای سودمندی از جمله خواندن و نوشتن در فایل های xml و html را دارد. با کمک آن می توان فایل های xml و html را باز کرد و اطلاعات آن را پارس کرد. این کلاس به صورت پیش فرض در php موجود می باشد و نیازی به هیچ کاره اضافه برای کار با آن نمی باشد. همچنین DOMDocument خود نیز از کلاس DOMNode مشتق شده است.

کد php زیر به شما کمک می کند که کل لینک های یک صفحه وب را دریافت کنید. از تابع File_get_contents() برای دریافت محتویات یک صفحه وب از url یا یک فایل استفاده کردیم . اطلاعات دریافت شده از صفحه در متغییر $urlContent ذخیره می شود. تمام url ها یا لینک ها از صفحه وب html توسط کلاس DOMDocument  استخراج می شود. همه لینک ها قبل از ذخیره شدن در متغیر توسط FILTER_VALIDATE_URL اعتبار سنجی می شوند.

خروجی :

استخراج کل url های یک صفحه توسط php

امیدوارم این کد “استخراج کل url های یک صفحه توسط php” برای شما مفید بوده باشد.

حسن شفیعی علاقه خاصی به برنامه نویسی وب و موبایل دارم و هر روز تلاش می کنم به این حوزه مسلط تر شوم و اطلاعاتم را به شکل کاربردی برای علاقه مندان در وب به اشتراک بگذارم. توصیه من: هاست میهن وب‎هاست
مطالب زیر را حتما بخوانید
دیدگاه کاربران (۸۲)

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

  1. جواد کیقبادی ۳ دی ۱۳۹۹

    درود بر شما
    درخواست کرال کردن وب سایتی رو دارم،‌ اگه کسی میتونه انجام بده به من ایمیل بزنه

    پاسخ
  2. احد ۹ شهریور ۱۳۹۹

    سلام خسته نباشید من میخواستم متنهای یک سایت رو با php استخراج کنم و به سک متغیر رشته ای بریزم میشه راهنمایی کنید ممنون میشم

    پاسخ
    1. حسن شفیعی ۹ شهریور ۱۳۹۹

      سلام. ممنون.
      یا با regex باید انجام بدید یا از dom parser استفاده کنید:
      https://netparadis.com/regular-expression-regex-php
      https://netparadis.com/php-simplexml-parser
      https://netparadis.com/web-scraping-php

      پاسخ
  3. ش.ش ۲۹ بهمن ۱۳۹۸

    سلام
    وقت بخیر
    ببخشید کلاس phpcrawler با استفاده از چه روشی سورس سایت ها رو درمیاره نه curl هست نه file_get_contents
    میدونید چجوری سورس سایت ها رو میخونه؟
    و اگر بخوایم تغیر بدیم به curl چکار باید کرد؟

    پاسخ
    1. حسن شفیعی ۲۹ بهمن ۱۳۹۸

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

      پاسخ
      1. ش.ش ۲۹ بهمن ۱۳۹۸

        ممنون از پاسختون
        آیا میشه با
        fopen()
        گرفت؟

        پاسخ
      2. حسن شفیعی ۲۹ بهمن ۱۳۹۸

        خیر. fopen برای باز کردن فایل های لوکال است.

        پاسخ
      3. ش.ش ۳۰ بهمن ۱۳۹۸

        وقتی توی کدهای پی اچ پی کرال چیزی پیدا نکردم از دو روش بالا دنبال روشهای دیگه گشتم و بلاخره با کنار هم گذاشتن چندین روش متفاوت پیدا کردم یکیش هم امروز همین fopen هست ببینید استفاده از این کد من انجام دادم
        کد من

        loadHTML($cod);
        $xpath = new DOMXPath($dom);
        $hrefs = $xpath->evaluate(“/html/body//a”);

        for($i = ‘0’ ; $i length; $i++){
        $href = $hrefs->item($i);
        $url = $href->getAttribute(‘href’);
        $url = filter_var($url, FILTER_SANITIZE_URL);
        // validate url
        if(!filter_var($url, FILTER_VALIDATE_URL) === false){
        echo ‘‘.$url.’
        ‘;
        }
        }

        function mytest($URL)
        {
        $handle = @fopen ($URL, “r”);
        if ($handle === false) return false;

        $buf = “”;
        while (!feof ($handle)) {
        $buf .= fgets($handle, 4096);
        }
        fclose ($handle);

        return $buf;
        }
        ?>

        پاسخ
  4. ش.ش ۲۵ آذر ۱۳۹۸

    سلام.ممنون بخاطر آموزشهاتون یه سوال داشتم از خدمتتون من چرا هرکاری میکنم نمیتونم همه لینک های یه سایت رو در یک فایل نوت پد ذخیره کنم
    و فقط یک لینک ذخیره میشه؟؟؟
    میشه لطفا شما مشکلمو حل کنید
    کد

    loadHTML($urlContent);
    $xpath = new DOMXPath($dom);
    $hrefs = $xpath->evaluate(“/html/body//a”);

    for($i = ‘0’ ; $i length; $i++){
    $href = $hrefs->item($i);
    $url = $href->getAttribute(‘href’);
    $url = filter_var($url, FILTER_SANITIZE_URL);
    // validate url
    if(!filter_var($url, FILTER_VALIDATE_URL) === false){
    echo ‘‘.$url.’
    ‘;
    file_put_contents(“link.txt”, “$url”);

    }
    }
    ?>

    پاسخ
    1. حسن شفیعی ۲۹ آذر ۱۳۹۸

      سلام. خوشحالیم که مفید واقع شده.
      باید یک فلگ داخل تابع file_put_contents اضافه کنید تا محتوای آن اور رایت نشود به اینصورت تابع مورد نظر را که در آخر کد شما هست رو تغییر بدید
      file_put_contents(“link.txt”, “$url \n”, FILE_APPEND);
      موفق و پیروز باشید.

      پاسخ
      1. ش.ش ۳ دی ۱۳۹۸

        عالی بود ممنون واقعا
        فرض کنید من میخوام از اطلاعات یک صفحه از پیجم بکاپ بگیرم و با این روش لینکهامو ذخیره میکنم وقتی میخوام از بکاپ یا همین فایل txt استفاده کنم چجوری باید لینک ها رو یدونه یدونه وارد اسکریپت کنم وقتی از تابع file_put_contents برای باز کردن فایل درون اسکریپتم استفاده میکنم کل فایل رو باهم نشون میده و وقتی میام از ایمپلود یا اکسپولد استفاده کنم خطا میده میشه در این مورد هم کمکم کنید ممنون
        کد اول برای ذخیره بکاپ لینک ها

        loadHTML($urlContent);
        $xpath = new DOMXPath($dom);
        $hrefs = $xpath->evaluate(“/html/body//a”);

        for($i = ‘0’ ; $i length; $i++){
        $href = $hrefs->item($i);
        $url = $href->getAttribute(‘href’);
        $url = filter_var($url, FILTER_SANITIZE_URL);
        // validate url
        if(!filter_var($url, FILTER_VALIDATE_URL) === false){
        echo ‘‘.$url.’
        ‘;

        file_put_contents(“link.txt”, “$url \n”, FILE_APPEND);

        }
        }

        ?>
        کد دوم برای خواندن بکاپ لینک ها
        $v) {

        echo ‘‘.$v.’
        ‘;

        }

        ?>

        پاسخ
      2. حسن شفیعی ۳ دی ۱۳۹۸

        خوشحالیم که مفید واقع شده.
        برای خواندن فایل txt مورد نظر باید از تابع file_get_contents بصورت زیر استفاده کنید و بعد خروجی آن را میتونید explode کنید

        $links = file_get_contents(“link.txt”);
        تابع Explode و Implode در PHP
        موفق باشید.

        پاسخ
      3. ش.ش ۴ دی ۱۳۹۸

        دقیقا همین راه رو من خودم قبلا رفتم حتی یک تابع هم نوشتم براش کنار اکسپلود ولی درست درنمیاد لطفا نگاه کنید

        کد:

        پاسخ
      4. حسن شفیعی ۵ دی ۱۳۹۸

        سلام.

        کد شما اصلاح شد و نتیجه رو بصورت زیر میتونید ببینید :


        موفق باشید.

        پاسخ
      5. ش.ش ۱۱ دی ۱۳۹۸

        سلام وقت بخیر
        اگه کد شما خط ۱۲ رو اغیر بدیم و اول خط دوتا //
        بذاریم
        یعنی
        echo ”.$url.”;
        بشه
        //echo ”.$url.”;
        کد میشه کد زیر درسته

        پس کد زیر رو لطفا تست کنید ببینید لینک هارو از فایل ذخیره شده باز میکنه یا نه
        فکر کنم کدرو برای من ناقص نشون میده و قالب سایتتون کد رو تغییر داده نشون میده

        کد:
        evaluate(“/html/body//a”);

        for($i = ‘0’ ; $hrefs->length; $i++){
        $href = $hrefs->item($i);
        $url = $href->getAttribute(‘href’);
        $url = filter_var($url, FILTER_SANITIZE_URL);
        // validate url
        if(!filter_var($url, FILTER_VALIDATE_URL) === false){
        //echo ”.$url.”;
        file_put_contents(“mylinks.txt”, “$url \r\n”, FILE_APPEND);

        }
        }

        $links = file_get_contents(“mylinks.txt”);
        $exploded = explode(‘\r\n’, $links);
        //print_r($exploded);
        foreach ($exploded as $url => $value) {

        return $url;
        }

        پاسخ
      6. حسن شفیعی ۱۸ دی ۱۳۹۸

        سلام. روی لینک سبز رنگ نمایش بیشتر بزنید تا کامل نمایش داده بشه.
        موفق باشید.

        پاسخ
      7. ش.ش ۲۰ دی ۱۳۹۸

        سلام
        ممنون از آموزشها و رسیدگیتون در قسمت نظرات
        من کدی که ارسال کردم توی جواب رو روی همون کد سبز رنگ یعنی دیدن نمایش بیشتر کلیک کردم و کپی کردم عکسش رو هم توی همین پست میفرستم خودتون ببینیدش
        شما همون کد که ارسال کردید خطی که توی عکس دورش خط کشیدم رو از کد بردارید و اجرا کنید و ببنید یا کد اشتباه اومده یا اشتباه نشون داده میشه
        ادرس عکس
        http://uupload.ir/files/hgqo_a.png
        کدی که با کلیک روی نمایش بیشتر نشون میده:

        loadHTML($urlContent);
        $xpath = new DOMXPath($dom);
        $hrefs = $xpath->evaluate(“/html/body//a”);

        for($i = ‘0’ ; $hrefs->length; $i++){
        $href = $hrefs->item($i);
        $url = $href->getAttribute(‘href’);
        $url = filter_var($url, FILTER_SANITIZE_URL);
        // validate url
        if(!filter_var($url, FILTER_VALIDATE_URL) === false){
        echo ”.$url.’
        ‘;
        file_put_contents(“mylinks.txt”, “$url \r\n”, FILE_APPEND);

        }
        }

        $links = file_get_contents(“mylinks.txt”);
        $exploded = explode(‘\r\n’, $links);
        //print_r($exploded);
        foreach ($exploded as $url => $value) {

        return $url;
        }

        پاسخ
      8. ش.ش ۲۴ دی ۱۳۹۸

        سلام وقت بخیر
        من یه راه دیگه بنظرم رسید فایل رو از طریق
        تابع file بازکردنی بدون مشکل نشون میده
        ممنونم از توضیح هاتون
        یه سوال دیگه داشتم من برای اینکه فقط لینک هایی که
        پسوند صفحه اونها xml هست رو برام جمع کنه و لینک های عادی رو جمع نکنه عبارت با قاعده اون رو میشه لطف کنید بهم بگید من برنامه هم دانلود کردم برای اینکه این عبارات رو درست بنویسم ولی همه کدهام یه اشکالی دارن برای بهتر نوشتن این عبارات از چه برنامه ای میشه استفاده کرد تو یه فیلم اموزشی دیدم طرف کد اچ تی ام ال رو انتخاب میکرد و برنامه عبارت باقاعده رو میداد شبیه این رو سایت ریجیکس داره ولی بازم برای افراد حرفه ای خوبه
        ممنون از کمکاتون

        پاسخ
      9. ش.ش ۴ بهمن ۱۳۹۸

        در مورد اسکریپت بالا برای اینکه فقط لینک هایی که
        پسوند صفحه اونها xml هست رو برام جمع کنه و لینک های عادی رو جمع نکنه عبارت با قاعده اون رو میشه لطف کنید بهم بگید من برنامه هم دانلود کردم برای اینکه این عبارات رو درست بنویسم ولی همه کدهام یه اشکالی دارن برای بهتر نوشتن این عبارات از چه برنامه ای میشه استفاده کرد تو یه فیلم اموزشی دیدم طرف کد اچ تی ام ال رو انتخاب میکرد و برنامه عبارت باقاعده رو میداد شبیه این رو سایت ریجیکس داره ولی بازم برای افراد حرفه ای خوبه
        ممنون از کمکاتون

        پاسخ
      10. حسن شفیعی ۴ بهمن ۱۳۹۸

        سلام.
        در مورد برنامه مورد نظر شما اطلاعی ندارم ولی عبارت با قاعده ای که میخواهید به صورت زیر می توانید استفاده کنید :

        لینک تست : https://regex101.com/r/lpKfoL/1
        موفق باشید.

        پاسخ
      11. ش.ش ۱۲ بهمن ۱۳۹۸

        سلام وقت بخیر ممنون دستتون درد نکنه
        من اینو استفاده کردم ولی داخل برنامه لینک های شبیه الینک های زیر هست بخاطر اون باید سورس هر لینک رو ببینم صفحه برای xml هست یا html میشه بگید از چه راهی باید اقدام کنم

        نمونه لینک های اسکریپت:

        http://test.ir/shanbe.ba ?data
        http://test.ir//mon=ox
        http://test.ir/www/1/4za.xml?sge
        http://teat.ir/www/zzz=sl

        برنامه من یه صفحه خودکار میسازه که توش همه لینک ها هست
        فایل های بک آپ برنامه پسوند xml دارن
        من میخواستم از طریق این اسکریپت که معرفی کردید فقط لینک هایی که صفحه آنها xml هستن رو پیدا کنم یا اسکریپت رو کاری کنم که یک لینک به اون بدم اگر اون لینک ماله صفحه xml باشه اونو ذخیره کنه اگه نباشه ذخیره نکنه
        هیچ راهی به ذهنم نمیرسه که برم دنبالش پیدا کنم

        منظورم اینه ببنید
        داخل صفحه
        http://test.ir/shanbe.ba ?data
        اگر تگی مربوط بهه فایل های xml باشه لینک رو تایید کنه یا ذخیره کنه
        مثلا تگ

        ممنون میشم راهنمایی کنید
        باز هم بابات وسایت و آموزشهاتون تشکرمیکنم

        پاسخ
      12. ش.ش ۱۲ بهمن ۱۳۹۸

        سلام دوباره
        ممنون بابت آموزشها و کمکهاتون
        من مییخواستم یه همچین کدی بنویسم کد زیر فرض کنید که لینک رو بدم وارد و اطلاعات پیج توی $page_source ذخیره بشه و از طریق $chek1 و $chek2 که عبارات منظم هستن(البته متاسفانه عباراتی که من تونستم بنویسم کلا غلط هستن) بگه دو تگ زیر در کد های ذخیره شده $page_source هستند یا نه؟

        وجود داره؟
        کد من

        <?php
        $url = ('http://mywebtest.org.com/rss/2bf&#039;);
        $urlContent = file_get_contents($url);

        $chek1="\”;
        $chek2=”\|'”;
        if (strstr($urlContent,’ ‘.$chek1.’ ‘) or strstr($urlContent,’ ‘.$chek2.’ ‘)){
        echo “ok”;
        echo “xml link”;
        }else{
        echo “no”;
        echo “xml link”;
        }

        پاسخ
      13. ش.ش ۱۸ بهمن ۱۳۹۸

        سلام
        ببخشید میشه بگید این کد رو چکار کنم درست بشه؟
        کار نمیکنه
        برای مثال لینک rss خودتون رو وارد کنید نمیشناسه
        میشه لطفا کمکم کنید

        پاسخ
      14. ش.ش ۲۷ بهمن ۱۳۹۸

        سلام وقت بخیر

        کد رو من نوشتم و خیلی هم خوب کار میکنه کد:

        بجای عبارات منظم خود تگ رو گذاشتنی خوب کار میکنه
        <?php
        $url = ('http://mywebtest.org.com/rss/2bf&#039;);
        urlContent = file_get_contents($url);

        $chek1=('’);
        $chek2=”;

        if (strstr($urlContent,$chek1)or strstr($urlContent,$chek2)){
        //echo “ok”;echo “xml link”;
        echo ‘‘.$ab2url.’
        ‘;

        // echo $ab1url;
        }else{
        echo “no”;echo “xml link”;
        }

        پاسخ
      15. ش.ش ۴ بهمن ۱۳۹۸

        سلام
        وقت بخیر
        من میخواستم ببینم با همینکار چکار کنم لینک های ذخیره شده که قبلا توی فایل بکاپ ما ذخیره شده دیگه ذخیره نشن مثال زیر رو ببینید من تست کردم ولی فرقی نداره باشه یا نه

        کد من=

        loadHTML($urlContent);
        $xpath = new DOMXPath($dom);
        $hrefs = $xpath->evaluate(“/html/body//a”);

        for($i = ‘0’ ; $i length; $i++){
        $href = $hrefs->item($i);
        $url = $href->getAttribute(‘href’);
        $url = filter_var($url, FILTER_SANITIZE_URL);
        // validate url
        if(!filter_var($url, FILTER_VALIDATE_URL) === false){

        $chektek = file(“mylinks.txt”);
        foreach($chektek as $che){
        if($che == $url){
        file_put_contents(“mylinks.txt”, “$url \r\n”, FILE_APPEND);
        echo ‘‘.$url.’
        ‘;
        }}}}

        پاسخ
      16. حسن شفیعی ۴ بهمن ۱۳۹۸

        سلام. ممنون
        باید در خود فایل جستجو کنید و اگر وجود نداشت تابع file_put_contents را اجرا کنید

        پاسخ
      17. ش.ش ۲۷ بهمن ۱۳۹۸

        سلام ممنون انجام دادم متشکرم

        پاسخ
      18. ilya ۱۸ اسفند ۱۳۹۸

        با سلام خدمت شما و پیشاپیش تبریک عید خدمتتون
        خواستم بابت وبتون تشکر کنم و یه سوال برام پیش اومد
        درجواب این دوست ما که گفتید باید در خود فایل سرچ کنن منظورتونو میشه دقیقتر بگید
        یا روی کدی که داده اند نشان بدهید
        آیا منظورتون همون راهی هست که ایشون رفته ان یا استفاده از تابع های جستوجو در متن هست مانند strpos

        یه سوال هم داشتم تو یه سوال که گفته بودن میخوان کل لینک های یه سایت رو سرچ کنن گفتید “این مورد crawl کردن است که حتما همراه با جستجو خود این کلمه رو هم اضافه کنید که لینک های یک صفحه رو میگیره و بصورت parent و child تا جایی که ممکنه پیش میره و لینک در لینک کل ایمیل ها رو بیرون میکشه .”
        میشه یه جمله که برای سرچ کردن توی گوگل باید زد رو مثال بزنید این هایی که گفتیدرو من میزنم و چیز ی نمیاد خودم یه اسکریپت نوشتم که کل لینک های یه سایت یا کل لینک های خودسایت و لینک های خارجی سایت رو پیدا میکنه ولی خیلی اصولی نیست
        چه جمله ای تو گوگل سرچ کنم یا اگه لینکی دارید میشه بدید

        ممنون بخاطر پاسختون

        پاسخ
      19. حسن شفیعی ۱۸ اسفند ۱۳۹۸

        سلام. خوشحالیم که مفید واقع شده.
        web scraping رو جستجو کنید :
        https://netparadis.com/web-scraping-php
        موفق باشید.

        پاسخ
      20. ilya ۱۹ اسفند ۱۳۹۸

        ممنون آقای شفیعی برای رسیدگی سریعتون
        برای ”
        باید در خود فایل جستجو کنید و اگر وجود نداشت تابع file_put_contents را اجرا کنید ”
        از تابع های سرچ در متن استفاده کنم یا یه دستور شرطی شبیه اونی که بالا داده ان میشه یا استفاده یه دستور شبیه به چیزی که برای جلوگیری از ثبت دادع تکراری توی دیتابیس هست؟

        پاسخ
      21. حسن شفیعی ۱۹ اسفند ۱۳۹۸

        بهتره اراده به خرج بدید جستجو کنید و جواب رو پیدا کنید
        https://sabzdanesh.com/%D8%AC%D8%B3%D8%AA%D8%AC%D9%88-%D8%AF%D8%B1-%D8%B1%D8%B4%D8%AA%D9%87-%D9%85%D8%AA%D9%86%DB%8C-%D8%A8%D8%A7-php

        پاسخ
  5. حمید ۳۰ بهمن ۱۳۹۷

    سلام
    در زمینه URL rewrite به کمک PHP برای سایت های داینامیک آموزشی دارید؟ باتشکر

    پاسخ
    1. حسن شفیعی ۳۰ بهمن ۱۳۹۷
  6. mohamadreza ۲۱ شهریور ۱۳۹۷

    خیلی ممنون آقای شفیعی
    سایتتون رو که نگاه کردم متوجه شدم چقدر جامع و قدم به قدم مسائل رو توضیح دادید.
    از اینکه یه هموطن مفید مثل شما دارم افتخار میکنم …

    پاسخ
    1. حسن شفیعی ۲۱ شهریور ۱۳۹۷

      خواهش می کنم. خیلی لطف دارید شما . همیشه موفق و پیروز باشید

      پاسخ
  7. mohamadreza ۲۱ شهریور ۱۳۹۷

    از پاسخ سریعتون تشکر میکنم🌹
    اگر بخام دقیق تر توضیح بدم، قصد دارم توی سورس یک صفحه وب قسمت عنوان و قیمت رو استخراج کنم!
    ابتدا و انتهای عنوان و قیمت مشخصه! میخواستم بدونم کدی هست که مثلا این سناریو رو انجام بده: توی سورس صفحه قسمتی از کد که ابتداش x و انتهاش y هست رو توی یه متغییر بریزه.

    پاسخ
    1. حسن شفیعی ۲۱ شهریور ۱۳۹۷

      خواهش می کنم. بله با regex به راحتی این کار قابل انجامه که باید الگوی مورد نظر رو بنویسید.
      https://netparadis.com/regular-expression-regex-php/
      همچنینآموزش web scrapping رو هم میتونید مطالعه کنید
      موفق باشید.

      پاسخ
  8. mohamadreza ۲۱ شهریور ۱۳۹۷

    سلام، ممنون ازمطالب خوب و کاربردیتون.
    ببخشید من تازه کارم و خیلی از توابع رو بلد نیستم! میخواستم یه کد بنویسم که آدرسای محصولات سایت که یه الگوی خاص دارن (https://site.com/product/1234/p_name) رو در بیارم و توی سورس هر محصول هم با توجه به پترنی که داره (“Product”,”name”:”تایتل محصول”,”p_name”) و (“price”:قیمت,”pricee”) اسم و قیمت محصول رو دربیارم تا اگر محصول قیمتش تغییر کرده بود متوجه بشم!
    ممنون میشم اگر راهنماییم کنید 🌹🌹🌹

    پاسخ
    1. حسن شفیعی ۲۱ شهریور ۱۳۹۷

      سلام . خوشحالم که مفید واقع شده.
      دقیق متوجه کاری که میخواین انجام بدین نشدم به هر حال از لینک های زیر میتونید استفاده کنید
      https://netparadis.com/php-server-variable
      https://netparadis.com/regular-expression-regex-php/

      موفق باشید.

      پاسخ
  9. علی ۲ مرداد ۱۳۹۷

    با سلام خدمت شما
    من یک سوال داشتم که شاید اصلا مربوط به این بحث نشه ولی خیلی مهم!
    من میخواستم مثل جاوا اسکریپت وقتی یک کد php مینویسم کاربر بعد از کلیک روی یک دکمه اون کد php ارسال بشه!

    مثلا ارسال ایمیل با php ، وقتی که کاربر روی یه دکمه کلیک کرد کد PHP اجرا بشه و ایمیل ارسال بشه

    ممنون میشم کمکم کنید

    با تشکر

    پاسخ
    1. حسن شفیعی ۲ مرداد ۱۳۹۷

      سلام . برای اینکار باید از ajax استفاده کنید

      آموزش ajax

      موفق باشیذ.

      پاسخ
      1. علی ۲ مرداد ۱۳۹۷

        با احترام
        ممنون که پاسخ دادید!
        یه سوال دیگه هم داشتم؟

        چجوری میشه داده های یک فرم مثلا وبسایتمو ، داده هاشو به صفحه لاگین اینستاگرام بفرستم؟

        ممنون بابت پاسخگویی سریعتون

        پاسخ
      2. حسن شفیعی ۲ مرداد ۱۳۹۷

        سلام . خود صفحه api اینستاگرام رو مطالعه کنید .
        https://www.instagram.com/developer
        موفق باشید.

        پاسخ
  10. علی ۱ مرداد ۱۳۹۷

    با سلام
    من یه کد میخواستم که بره به آدرس مورد نظر و لینک موجود در لاین ۱۸ برداره!

    برای این متدی هست ممنون میشم به ایمیلم بفرستید

    پاسخ
    1. حسن شفیعی ۱ مرداد ۱۳۹۷

      سلام . از explode هم میتونید استفاده کنید ولی راحتر از اون میتونید از تابع file بهره ببرید که خط ها رو بصورت هر خانه از آرایه برگشت میده و میتونید اون رو بخونید

      $lines = file('https://site.com/index.html');
      echo $lines[2]; // دریافت خط ۳م

      موفق باشید.

      پاسخ
  11. علیرضا ۲۷ تیر ۱۳۹۷

    با سلام خسته نباشید ببخشید من اگ بخوام متن لینک هم بگیرم چیکار باید بکنم متاسفانه راهی ب ذهنم نرسید برای این کار تشکر بابت وبسایت خوبتون

    پاسخ
    1. حسن شفیعی ۲۷ تیر ۱۳۹۷

      سلام ممنون .
      مقدار nodeValueاز آبجکت $href شامل متن داخل تگ هستش. ($href->nodeValue)
      موفق باشید.

      پاسخ
      1. علیرضا ۲۷ تیر ۱۳۹۷

        میشه بیشتر توضیح بدید یا تو کد بالا ازش استفاده کنید ممنون میشم

        پاسخ
      2. حسن شفیعی ۲۷ تیر ۱۳۹۷

        به جای خط ۱۵ این کد رو قرار بدید

        اگر متن ها فارسی هستند به اول اسکریپت این خط رو هم اضافه کنید تا کاراکترهای فارسی درست نمایش داده بشه.

        موفق باشید.

        پاسخ
      3. ش.ش ۲۳ مرداد ۱۳۹۹

        برای بدست آوردن تایتل لینک باید چکار کرد؟

        echo ‘‘.$href->nodeValue.’‘;

        پاسخ
      4. حسن شفیعی ۲۳ مرداد ۱۳۹۹

        سلام.
        بفرمایید $href->getAttribute(‘title’)
        موفق باشید.

        پاسخ
      5. ش.ش ۲۹ مرداد ۱۳۹۹

        واقعا ممنون بابت وب و پاسخهاتون
        یه سوال هم داشتم فقط مربوط به این مطلب نیست و تو وبتون هم پیدا نکردم
        برای اینکه یه کد رو که اینکد کردیم بصورت استرینگ استفاده کنیم بجز
        eval
        که راحت میشه شکست از چه تابع های کال بک بهتره استفاده کرد؟
        لینک مقاله ای چیزی زبان اصلی هم باشه بدید ممنون میشم

        پاسخ
      6. حسن شفیعی ۲۹ مرداد ۱۳۹۹

        سلام. خوشحالیم که مفید واقع شده.
        از توابع gzinflate – str_rot13 – base64encode – mcrypt_encrypt – openssl میتونید بر کدگذاری استفاده کنید.
        eval فقط کد رو اجرا میکنه و ارتباطی با رمزنگاری کدها نداره

        پاسخ
      7. ش.ش ۱ شهریور ۱۳۹۹

        سلام منظورم همون اجرا کننده کدها بود
        بحز استفاده از
        eval
        , include
        که کاربر برداره print جایگزین کنه کدهای اصلی چاپ میشه چه راهی هست
        function_creation منقضی شده بخاطر اون جایگزین دیگه ای میخواستم
        چیزی بذهنتون میرسه
        مثل همیشه ممنون بابت پاسخ هاتون

        پاسخ
      8. حسن شفیعی ۱ شهریور ۱۳۹۹

        سلام. متاسفانه مورد دیگری تست نکردم

        پاسخ
  12. سعید ۱۵ خرداد ۱۳۹۷

    با سلام خدمت شما. من این کد شمارو برای پیدا کردن url برای سایت “تابناک” میزنم نمیتونه پیدا کنه. مشکل از کجاست؟
    پیشاپیش ممنون از پاسخ شما

    پاسخ
    1. حسن شفیعی ۱۶ خرداد ۱۳۹۷

      سلام . در صفحه موردنظر حتما باید ایمیلی وجود داشته باشه تا بشه استخراح کرد . معمولا این سایت ها ایمیل کاربران رو در سورس صفحه نمایش نمیدن و عملا نمیشه کاری کرد چرا که اسکریپت ما فقط سورس صفحه رو بررسی و اگر ایمیل بود نمایش میده .

      موفق باشید.

      پاسخ
      1. سعید ۱۶ خرداد ۱۳۹۷

        با سپاس از پاسخ شما.من منظورم لینک های سایت بود و برای ایمیل نمیخوام

        پاسخ
      2. حسن شفیعی ۱۶ خرداد ۱۳۹۷

        احتمالا دسترسی ها رو برای ربات ها بستن و باید با ارسال کوکی و موارد دیگه سعی در استخراج لینک ها کنید که با curl به راحتی میتونید این هدرها رور ست کنید و کدهای آماده این مورد رو پیدا کنید.

        پاسخ
      3. سعید ۱۶ خرداد ۱۳۹۷

        ممنونم دوست عزیز
        فرمودین از curl استفاده کنم. من از این کد curl در وب سایت خودتون استفاده کردم و برای چند تا سایت استفاده کردم جواب داد اما باز برای تابناک جواب نداد.

        ————————————————————————–
        $url = “http://tabnak.ir/”;
        $content = curlRequest($url);
        print $content;

        function curlRequest($url) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        $response = curl_exec($ch);
        $body = substr( $response, $header_size );
        fclose($ch);
        return $content;
        }
        ——————————————————————————————
        و برای این سایت این ارور رو میده که از ارور عکس گرفتم و در آدرس زیر قابل مشاهده است.
        http://uupload.ir/files/3rez_شس.jpg

        پاسخ
      4. حسن شفیعی ۱۷ خرداد ۱۳۹۷

        خواهش می کنم .
        خب مشکل از سایت مرجع نیست و کد ها ایراد داره که خطا رو هم مشاهده می کنیم.
        از کد CURL زیر استفاده کنید.

        مقدار متغییر $response شامل محتوای صفحه سایتی که تعریف کردیم است که میتوانید از تلفیق کد بالا و کد این مقاله که یک regex ساده و حلقه است, کل URL ها رو بخوانید .

        ولی خب سایتی که معرفی کردید بنابر چیزی که کامنت های اول خدمتتون گفتم کمی متفاوت است و جلوی یک سری از دسترسی های ربات ها رو گرفته بنابراین کد رو بصورت دیگری براتون نوشتم(همان CURL با چندین هدر مختلف دیگه) که میتونید ازش برای بدست آوردن لینک ها بهره ببرید.

        کد کامل :

        موفق باشید.

        پاسخ
      5. سعید ۱۷ خرداد ۱۳۹۷

        ممنون از شما.

        پاسخ
  13. امین ۶ خرداد ۱۳۹۷

    ارایه ها رو هم خالی می کنه؟؟

    پاسخ
    1. حسن شفیعی ۶ خرداد ۱۳۹۷

      بله همه موارد توسط خود php انجام میشه و نیاز به کار خاصی از سمت شما نیست.

      پاسخ
  14. امین ۶ خرداد ۱۳۹۷

    سلام خسته نباشید با چه دستوری یا چه طری با php می شه بعد از اینکه کارمون با متغییر های تموم شد اون ها رو خالی کنیم که حافظه اشتغال نمونه؟

    پاسخ
    1. حسن شفیعی ۶ خرداد ۱۳۹۷

      سلام .ممنون. نیاز به کار خاصی نیست بعد اجرای برنامه , هسته php خودش مقدار ها رو از حافظه موقت حذف می کنه.
      موفق باشید.

      پاسخ
      1. امین ۶ خرداد ۱۳۹۷

        ممنون از پاسختون،من الان xampp رو رو سیستم دارم سایتم یه بانک اطلاعاتی داره،کنار همون پوشه هاش هستتو پوشه کانینگ هم اسم لوکال هاستو دادم برای بانک اطلاعاتی،اما چرا وقتی حتی بانک اطلاعاتیم رو بر می دارم که کنار فایل های دیگه هست هیچ تغییر حاصل نمیشه و متو جه نمیشه بانک اطلاعاتی نیست و زمان فراخوانی داده های بانک اطلاعاتی دادها رو بایانکه بانک اطلاعاتی سرجاش نیست میاره،می خواستم بدونم تو برنامه xammppایا بانک اطلاعاتی دیگه در جای خاصی وجود داره که خودش ساخته بشه؟!!اگه هست کجاست من بانک اطلاعاتم رو با پیاچ پی ادمین دایرکت درست کردم بعد ایکسپورت کردم گذاشتم تو پوشه هایکنار فایل ها دیگه ممنون می شم راخنمایی کنید

        پاسخ
      2. حسن شفیعی ۶ خرداد ۱۳۹۷

        خواهش می کنم. مطمینا فایل کانفیگ اتصال به دیتابیس در جای دیگه از این پروژه وب شماست . که خب نیاز است در حد مقدماتی php بلد باشید تا بتونید این موارد رو پیدا و تغییر بدید.

        پاسخ
  15. کامران ۲۲ اردیبهشت ۱۳۹۷

    با سلام
    کدتون رو اجرا میکنم این ارور میاد
    Warning: file_get_contents(https://-.ir): failed to open stream: No connection could be made because the target machine actively refused it. in E:\wamp\Crawler\New folder (4)\tex.php on line 5
    array(0) { } 0 email addresses in total: ;

    پاسخ
    1. حسن شفیعی ۲۲ اردیبهشت ۱۳۹۷

      سلام . آدرس سایت مورد نظر رو با http:// وارد کنید و سایت مورد نظر SSL نداره .

      موفق باشید.

      پاسخ
  16. ali ۲۱ اردیبهشت ۱۳۹۷

    سلام ممنون از آموزش.
    اگر بخواهیم برای url هایی که پیدا میکنیم یک فیلتر قرار دهیم باید چکار کنیم؟یعنی مثلا از تمام این url هایی که پیدا کردم فقط آدرسی هایی که آخرشان به .ir یا edu.com مثلا ختم میشود پیداکن.
    سپاس

    پاسخ
    1. حسن شفیعی ۲۱ اردیبهشت ۱۳۹۷

      سلام .
      باید regex نویسی رو بلد باشید و بتوانید تغییرات مورد نظر را لحاظ کنید

      آموزش regular expression

      موفق باشید.

      پاسخ
  17. داوود قلی زاده ۱۴ اردیبهشت ۱۳۹۷

    سلام و عرض ادب و احترام

    ممنون از مطالب مفیدتون. جناب دو سوالی برای من در رابطه با این اسکریپت ایجاد شد.
    توی خط پنجم @ به چه معنایی هست. هر چی گشتم در موردش چیزی پیدا نکردم.
    دومین سوال این است که چرا توی حلقه for شما به صورت استرینگ ‘۰’ را نوشتید من با اینتجر هم امتحان کردم مشکلی نداشت.

    پاسخ
    1. حسن شفیعی ۱۴ اردیبهشت ۱۳۹۷

      سلام . خوشحالم که مفید واقع شده .
      از @ برای جلوگیری از نمایش خطا استفاده کردیم تا خطاهای مربوط به Notice و غیره حین اجرای اسکریپت نمایش داده نشه. (انواع خطاها در php)
      به دلیل اینکه در سایت و قسمت کد ها ۰ رو نمایش نمیداد مجبور شدیم این مورد رو بین دوتا qoute قرار بدیم تا هنگام کپی کد ها به مشکل برنخورید .

      موفق باشید.

      پاسخ
  18. سعید ۵ اردیبهشت ۱۳۹۷

    ممنونم از شما.
    ممکنه لطف کنید به راهنمایی بدین. اگه بخوام تمام صفحات یک سایت رو بگردم یا اینکه چند صفحه رو بگردم آیا کدی براش دارید ؟
    ممنون

    پاسخ
    1. حسن شفیعی ۵ اردیبهشت ۱۳۹۷

      خیر دوست عزیز کد آماده ای برای این مورد نداریم . اگر php بلد باشید میتونید پیاده سازی کتید.

      موفق باشید.

      پاسخ
  19. سعید ۵ اردیبهشت ۱۳۹۷

    خیلی ممنون زحمت کشیدی.
    این امکان وجود داره که خودش اتوماتیک آدرس صفحات دیگه رو پیدا کنه و بره آدرس ایمل های اونام پیدا کنه؟ یعنی یه صفحه بهش بدیم بعد بره تو به آدرس دیگه تو اون صفحه و ….. . من دنبال اینجور چیزیم. سایتای زیادی گشتم اما پیدا نکردم

    پاسخ
    1. حسن شفیعی ۵ اردیبهشت ۱۳۹۷

      خواهش میکنم . این مورد crawl کردن است که حتما همراه با جستجو خود این کلمه رو هم اضافه کنید که لینک های یک صفحه رو میگیره و بصورت parent و child تا جایی که ممکنه پیش میره و لینک در لینک کل ایمیل ها رو بیرون میکشه .
      موفق باشید.

      پاسخ
  20. سعید ۵ اردیبهشت ۱۳۹۷

    سلام . خیلی ممنون از سایت خوبتون
    من یه کد مثل همین میخوام اما آدرس ایمیل هایی که توی اون سایت هست رو بهم بده و از سایتی که بهش دادم به یک آدرس دیگه بره و ایمیل های اونم در بیاره و همین جوری ادامه بده. در واقع متوقف نشه
    میتونید راهنماییم کنید ؟
    سپاس از شما

    پاسخ
    1. حسن شفیعی ۵ اردیبهشت ۱۳۹۷

      سلام . بله برای استخراج ایمیل صفحات وب کافیه بصورت زیر عمل کنید.

      به جای https://site.com در خطوط اول آدرس صفحه وب مورد نظر را که واردکنید ایمیلی اگر وجود داشته باشه براتون برگشت میده .
      استخراج ایمیل های صفحه وب
      همچنین میتونید آرایه از آدرس های URL خودتون رو بسازید و در یک حلقه foreach بزارید تا اجرا بشه و بعد استخراح ایمیل ها , در جایی مثلا فایل و یا دیتابیس ذخیره کنه.

      موفق باشید.

      پاسخ
  21. حمید ۲۱ مرداد ۱۳۹۶

    سلام

    تست کردم کار نکرد!

    پاسخ
    1. حسن شفیعی ۲۱ مرداد ۱۳۹۶

      سلام . بله به خاطر یک ; اسکریپت به درستی خروجی رو نشون نمی داد که کد رو ویرایش کردم و میتونید دوباره تست کنید و جواب می ده .

      هر گونه خطای دیگری دریافت کردید ریپلای بدید تا ایشالا مشکلتون حل بشه . موفق باشید

      پاسخ
دوره های آموزشی