Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> PHP Screenshot
timez
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 1.07.2016

Ostrzeżenie: (0%)
-----


Witam serdecznie, poszukuje już od kilku dni i nie mogę znaleźć.. Potrzebuję mieć zwykły przycisk który po kliknięciu będzie wyświetlać gdzie chce zapisać dany obraz /png. Znalazłem tutaj jedno ale nie działa mi niestety..
  1. function take_screenshot()
  2.  
  3. {
  4. html2canvas(document.body, {
  5. onrendered: function(canvas)
  6. {
  7. var img = canvas.toDataURL()
  8. $.post("save_screenshot.php", {data: img}, function (file){
  9. window.location.href = "save_screenshot.php?file="+ file
  10. });
  11. }
  12. });
  13. }

PHP
  1. <?php
  2.  
  3. if($_GET['file'])
  4. {
  5. $file=$_GET['file'];
  6. if (file_exists($file))
  7. {
  8. header('Content-Description: File Transfer');
  9. header('Content-Type: image/png');
  10. header('Content-Disposition: attachment; filename='.basename($file));
  11. header('Content-Transfer-Encoding: binary');
  12. header('Expires: 0');
  13. header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  14. header('Pragma: public');
  15. header('Content-Length: ' . filesize($file));
  16. flush();
  17. readfile($file);
  18. unlink($file);
  19. }
  20. }
  21.  
  22. if($_POST['data'])
  23. {
  24. $data = $_POST['data'];
  25. $file = md5(uniqid()) . '.png';
  26. $uri = substr($data,strpos($data,",")+1);
  27. file_put_contents('./'.$file, base64_decode($uri));
  28. echo $file;
  29. exit();
  30. }
  31. ?>


Piszę pracę o Leap Motion, mam dane ćwiczenie które rysuje i po tym kończy się zadanie i button się wyświetla. Ale gdy go klikam niestety nic się nie dzieje a zależy mi mega by się mógł zapisać screen.. Bardzo was proszę pomoc!
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
franki01
post
Post #2





Grupa: Zarejestrowani
Postów: 508
Pomógł: 75
Dołączył: 2.11.2005
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


1. Funkcja html2canvas nie jest funkcją JavaScript. Trzeba użyć/pobrać odpowiednie biblioteki. Zrobiłeś to?
2. Nie wiem czy sobie zdajesz sprawę, ale pierwszy if() w PHP jest mega niebezpieczny i wręcz sam błaga o to, żeby wykorzystać jego lukę i wyciągnąć zawartość plików PHP. Przeanalizuj sytuację, gdy w $_GET['file'] znajdzie się tekst "index.php" albo co gorsza dowolny inny plik z serwera (z jakimiś hasłami).
3. Popularne przeglądarki pozwalają na zainstalowanie konsoli błędów dla JavaScript (webdeveloper toolbar dla firefox). Pozwala to na podglądanie błędów spowodowanych przez JavaScript. Zainstaluj sobie taki dodatek. Prawdopodobnie pojawi się jakiś błąd związany z punktem 1.
4. Prawdopodobnie problem jest z uprawnieniami katalogów na serwerze. Jeśli trzymasz skrypty na serwerze pod Windowsem, zignoruj ten punkt. Jeśli na linuxie, czytaj dalej.
a. Utwórz w katalogu ze stroną katalog "tmp".
b. Za pomocą klienta FTP, musisz zmienić mu atrybuty na 0777 (zaznaczyć wszystkie uprawnienia do odczytu, zapisu i wykonania).
c.
  1. file_put_contents('./'.$file, base64_decode($uri));

zmienić na:
  1. file_put_contents('./tmp/'.$file, base64_decode($uri));

d. bezpośrednio przed:
  1. if (file_exists($file))

dodaj taki kod:
  1. $file = './tmp/'.str_replace(array('/', '\\', '..'), '', $file);


Dodatkowo z grubsza pozbędziesz się tym problemu z punktem 2.

Przede wszystkim zacznij od odpowiedniej realizacji punktów 1 i 3.

Ten post edytował franki01 1.07.2016, 21:05:24
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 6.10.2025 - 03:22