PHP, shell_exe ve scrot kullanarak x ekran yakalamak için nasıl

3 Cevap php

Ben bir iç Ar-Ge projesi için bir web sayfası ekran yakalama uygulaması inşa ediyorum.

Çevre: Ubuntu 9.04 (varsayılan masaüstü kurulum), Apache, PHP.

Şimdiye kadar, bir parametre (URL) alır firefox kadar patlar, ekran kapmak ve bir PNG olarak kaydeder bir bash komut dosyası var. Ben terminal bu çalışan denedim ve gayet iyi çalışıyor.

İşte Bash script:

#!/bin/bash
firefox $1 # Start firefox and go to the passed in URL
scrot -d 5 test.png # Take screen grab with 5 second delay

Sonraki Ben shell_exec komut dosyasını çalıştırmak için kullandığı basit bir PHP sayfası oluşturduk:

<?
  // Sample URL
  $url = 'http://www.google.com'; 
  // Run the script
  shell_exec('sh script.sh ' . $url);
  // Out put HTML to display image
  echo '<img src="test.png" />';
?>

However, when the PHP page is called the screen is not captured. A quick look in the apache error logs show the following message:

Error: no display specified
giblib error: Can't open X display. It *is* running, yeah

Ben apache farklı bir kullanıcı olarak çalışan ve benim X ekrana erişim yok çünkü bu olduğunu tahmin ediyorum.

Yani, herkes ben yanlış yapıyorum üzerinde herhangi bir ışık tutabilir ya da nasıl geçerli kullanıcı ekranı yakalayabilirsiniz.

Teşekkürler.

3 Cevap

PHP Apache altında çalışan firefox başlatma kötü bir fikir (bu kesinlikle yanlış geliyor) gibi geliyor bana.

Bunu yapacağını yolu:

  • a PHP webpage (which runs under Apache) that receives the URL ; something like a form, for instance
    • bu sayfa bir veritabanı gibi sistemde URL ekler, bir kuyrukta olarak kullanılacak
    • Bu URL "işlemek" olarak işaretlenmiş
  • a PHP (or another language) script, totally independant from Apache ; for instance, launched by the crontab
    • Bu komut (örneğin en son biri,) veritabanındaki kuyruktan bir URL seçer ve "işlem" olarak işaretler
    • daha sonra firefox başlattı ve ekran yapar kabuk-komut, Lauches
    • bir ekran görüntüsü kuyrukta URL "done" olarak işaretlenmiş, yapılır ve ekran görüntüsü yolu URL ilişkilidir
    • Apache den bağımsız olarak, bu, çalışır
  • another web page displays the queue, and the status of each URL ("to process", "processing", "done + path to the screenshot"
    • hatta herkese her URL'yi + ekran göstermek değil, bir kullanıcı ve bir URL'ye betwen bir dernek olan hayal edebiliyorum.

Bu sistem, çok sayıda avantajları ile

  • web sayfaları için php + apache
  • "sistem" parçaları için apache dışında php
  • Eğer tek bir sunucu üzerinde web sayfalarını olabilir
  • and you can have several machines (linux, windows, mac -- maybe using virtual machines) to make the screenshots
    • Farklı işletim sistemleri ekran görüntüleri almak için izin
    • ^ ^ yol daha ölçekler

Gerçekten sorusuna bir cevap değil, ama daha iyi bir yol olduğunu düşünüyorum ... Umarım bu yardımcı olur!

İşte bir guide firefox ve xvfb kullanarak ekran yakalama yapmak. Bu yaklaşımla avantajı açılış ve ana X sunucusu üzerinde kapanış hiçbir firefox pencere olacak olmasıdır. Ayrıca izinler ile sorununuzu çözecektir.

Eğer apache gibi aynı kullanıcı olarak bash ve firefox koşmak değil mi?