Facebook Twitter Instagram
    TecAdmin
    • Home
    • FeedBack
    • Submit Article
    • About Us
    Facebook Twitter Instagram
    TecAdmin
    You are at:Home»Linux Tutorials»Capturing the Screenshot of Websites using PHP and Linux

    Capturing the Screenshot of Websites using PHP and Linux

    By RahulJanuary 30, 20232 Mins Read

    Wkhtmltoimage is a very useful application to create screenshots of a website or webpage. Sometimes we are required to create a screenshot of web pages and store in our system. It uses QT Webkit rendering engine for creating images in various formats. This article will help to capture screenshots of a webpage using PHP script and Linux command line.

    Advertisement

    Step 1: Install wkhtmltoimage

    Visit the wkhtmltopdf.org and install and download the package for your Linux system. Then install it using the standard package manager. For example, to download and install the package on Ubuntu 22.04, execute:

    wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-2/wkhtmltox_0.12.6.1-2.jammy_amd64.deb 
    sudo apt install -f ./wkhtmltox_0.12.6.1-2.jammy_amd64.deb 
    

    Step 2: Capture Screenshot Using Command Line

    First, check wkhtmltoimage script using the Linux command line. The following command will take a screenshot of http://google.com and create an image with the name google.jpg.

    wkhtmltoimage --no-images --load-error-handling ignore http://google.com google.jpg 
    

    Step 3: PHP Code to Create Image

    Use the following PHP code to generate images from the website URL. This script required to be enabled the shell_exec function for Apache. Most shared hosting providers don’t allow this function.

    Create a file name getImage.php and put below code:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
     
    $url = $_GET['url'];    // Website URL to Create Image
    $name = $_GET['img'];   // Output Image Name
    $command = "/usr/bin/wkhtmltoimage --no-images --load-error-handling ignore";
    $dir_img = "/var/www/html/images/";     // Image files will be saved here
    $ex_cmd = "$command $url " . $dir_img . $name;
    $output = shell_exec($ex_cmd);
    ?>

    Use the following syntax or demo URL to generate an image of the website.

    Example:

    https://example.net/getImage.php?url=http://google.com&img=image1.jpg

    Step 4: PHP Script for SEO Friendly URL

    If you want to create SEO friendly URL for this setup, you can use the below steps.

    Create a few required directories in your web server document root

    mkdir -p /var/www/html/getImage/images/ 
    

    Create index.php file with the following content. Make sure all directory paths are correct,

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?php
     
    $url = str_replace('index.php','', $_SERVER['PHP_SELF']);
    $url = str_replace($url,'',$_SERVER['REQUEST_URI']);
    $url = explode('/',$url);
    $name = array_shift($url);
    $weburl = array_shift($url);
     
    $command = "/usr/bin/wkhtmltoimage --no-images --load-error-handling ignore";
    $dir_img = "/var/www/html/getImage/images/";     // Image files will be saved here
    $ex_cmd = "$command $weburl " . $dir_img . $name;
    $output = shell_exec($ex_cmd);
    echo "<img src=&quot;/getImage/images/$name>";  // comment this to disable image show on page
     
    ?>

    Now create a .htaccess file in this directory to move all requests to the index.php file. make sure your server is enabled to use the .htaccess file.

    vi /var/www/html/getImage/.htaccess 
    

    Add the following content to the file:

    .htaccess

    RewriteEngine On
    RewriteCond %{REQUEST_URI} /images/.+(gif|png|jpg)$
    RewriteRule .* – [L]
    RewriteRule ^.*$ index.php

    Save the file and close it.

    Now you can create images by accessing the URL below:

    Syntax:

     http://youdomain.com/getImage/[imagename]/[site url without http prefix]

    Example:

     https://tecadmin.net/getImage/123.jpg/yahoo.com

    html to image wkhtmltoimage
    Share. Facebook Twitter Pinterest LinkedIn Tumblr Email WhatsApp

    Related Posts

    PHP Arrays: A Beginner’s Guide

    Modulus Operator (%) in Bash

    Using Modulus Operator (%) in Bash

    Calculate Remainder in Bash

    How to Calculate Remainder (%) of a Division in Bash

    View 7 Comments

    7 Comments

    1. Cric on September 20, 2019 2:46 am

      Very nice post. I just stumbled upon your weblog and wished to say
      that I have truly enjoyed browsing your blog posts.

      After all I will be subscribing to your feed and I hope you
      write again soon!

      Reply
    2. fol.to on June 25, 2019 8:07 pm

      You are a very bright individual!

      Reply
    3. Ft Farhad on February 24, 2016 7:16 am

      Really php is a allrounder language.

      Reply
    4. Domus on May 12, 2014 11:47 am

      Hi, great article although if you don’t want to worry about scalability and managing your own service you could use a free third-party service. Like GrabzIt’s PHP API: http://grabz.it/api/php/

      Reply
    5. omar on April 24, 2014 3:00 pm

      Hello again!

      Thank you for fast answers!

      This updated steps helped me yes but there is one thing.

      If you want to run this the link from another website so I would do this:

      in my case:
      <img src="/getimages/.jpg/” />
      I get error on the main site and it’s look like I am loading image that dosen’t exists.

      So is there any change to make the url http://thedomain.com/getimages/somedomain.com.jpg/somedomain.com be an image, not php file.

      Like this:
      s.wordpress.com/mshots/v1/http://google.com <– You cannot veiw the source cause it's image 🙂

      Regards

      Reply
    6. omar on April 24, 2014 10:55 am

      Hello.

      Thx for this advise.

      is there any possible way to let the script work that like this one:
      s.wordpress.com/mshots/v1/http://google.com

      I could use it like this in your way with mydomain.com/getImage.php?url=http://$getDomain&img=$getDomain

      but if I do this way then the image will now show on that url, I would like to make the url (the image) like the s.wordpress.com does.

      Thanks

      Reply
      • Rahul on April 24, 2014 12:30 pm

        Hi Omar,

        We have updated the article, and added Step #4, I hope that will fulfill your requirement.

        Also there are little changes in Step 1, to download latest binaries.

        Reply

    Leave A Reply Cancel Reply

    Advertisement
    Recent Posts
    • Configure Postfix to Use Gmail SMTP on Ubuntu & Debian
    • PHP Arrays: A Beginner’s Guide
    • Deploying Flask Application on Ubuntu (Apache+WSGI)
    • OpenSSL: Working with SSL Certificates, Private Keys and CSRs
    • How to Create and Read List in Python
    Facebook Twitter Instagram Pinterest
    © 2023 Tecadmin.net. All Rights Reserved | Terms  | Privacy Policy

    Type above and press Enter to search. Press Esc to cancel.