login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Verwerken Screenshots

Offline viezevis - 29/09/2005 14:00
Avatar van viezevisHTML interesse Ik heb volgend script gemaakt om screenshots te uploaden met bijhorend bericht en er automatisch een thumbnail van te laten maken. Oorspronkelijk maakte ik gebruik van move_uploaded_file om de bestanden te uploaden maar vermits de server ondertussen in safe mode staat werkt dit niet meer en heb ik het aangepast om via ftp te werken. Ik kan het bericht nog perfect versturen en de screenshots uploaden, ik heb alleen volgende problemen:
1. De thumbnails worden niet meer aangemaakt
2. De bestandsnamen van de screenshots worden niet meer in de db opgeslagen
3. Wanneer ik het formulier verzend om een screenshot te uploaden begint hij het te uploaden maar ipv te geven dat het correct is geupload of opnieuw een leeg formulier weer te geven om een nieuw shot te uploaden blijft hij gewoon het ingevulde formulier weergeven (Ondanks dat browser wel zegt dat de pagina geladen is) of geeft hij terug het oorspronkelijke formulier weer om een nieuw bericht toe te voegen.

Volgens mij loopt er iets mis bij het aanmaken van de thumbnail vermits alles wat na die functie komt niet meer wordt uitgevoerd (had het uploaden bv eens na het maken van thumbnail gezet en het screenshot werd dan ook niet meer geupload).

Het script is het volgende:

  1. <?php
  2. include('config.php');
  3. include('include/ftpfilemanagement.php');
  4. include('include/fotobewerking.php');
  5. include('include/login.php');
  6. ini_set(memory_limit,"20M"); //Memory limit op 20 MB zetten zodat resizen van screenshot mogelijk is
  7. $login = new login;
  8. if(!$login->is_ingelogd()) {
  9. echo "gelieve eerst <a href='index.php'>hier</a> in te loggen.";
  10. } //kijken of de admin is ingelogd
  11.  
  12. elseif(isset($_POST['submitbericht'])) { //Kijken of het bericht werd ingevoerd
  13. $datum = mktime(0, 0, 0, $_POST['maand'], $_POST['dag'], $_POST['jaar']); //timestamp maken van de datum
  14. mysql_query("INSERT INTO nl_screens_bericht_".$_POST['project']." (datum, titel, bericht) VALUES (".$datum.", '".$_POST['nl_titel']."', '".$_POST['nl_bericht']."')") or die(mysql_error());
  15. mysql_query("INSERT INTO en_screens_bericht_".$_POST['project']." (datum, titel, bericht) VALUES (".$datum.", '".$_POST['en_titel']."', '".$_POST['en_bericht']."')") or die(mysql_error()); //bericht in nl en en tabel van db opslaan
  16. $id = mysql_insert_id(); //id van het bericht bewaren om bij de screenshots aan te geven
  17. $mapt = "/httpdocs/v2/images/screenshots/".$_POST['project']."/thumbs_id".$id."/";
  18. $maps = "/httpdocs/v2/images/screenshots/".$_POST['project']."/screens_id".$id."/"; //mappen voor thumbnails en screenshots instellen
  19. $filemanagement = new ftpfilemanagement;
  20. $filemanagement->makedir($mapt, 0755);
  21. $filemanagement->makedir($maps, 0755); //nieuwe mappen voor screenshots en thumbnails aanmaken?>
  22.  
  23. <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>?id=<?php echo $id."&project=".$_POST['project'];?>" ENCTYPE="multipart/form-data">
  24. <table border=0><tr><th>Screenshot</th><td><input type="file" name="bestand"></td></tr>
  25. <tr><th>Nog een screenshot toevoegen:</th><td><input type="checkbox" name="addscreen" value="true"></td></tr>
  26. <tr><td colspan="2"><center><input type="submit" name="submitscreen" value="Toevoegen"></center></td></tr></table></form>
  27. <?php }
  28.  
  29. elseif(isset($_POST['submitscreen'])) { //kijken of er een screenshots werd geupload
  30. $ftpmapt = "/httpdocs/v2/images/screenshots/".$_GET['project']."/thumbs_id".$_GET['id']."/";
  31. $ftpmaps = "/httpdocs/v2/images/screenshots/".$_GET['project']."/screens_id".$_GET['id']."/";
  32. $mapt = "/home/httpd/vhosts/bsprojects.be".$ftpmapt;
  33. $maps = "/home/httpd/vhosts/bsprojects.be".$ftpmaps;
  34. $filename = $_FILES['bestand']['name'];
  35. $filemanagement = new ftpfilemanagement;
  36. $filemanagement = new ftpfilemanagement;
  37. $screen = $filemanagement->uploadfile($ftpmaps,$_FILES['bestand']['tmp_name'], $_FILES['bestand']['name'], binary);
  38. $fotobewerking = new fotobewerking; //klasse aanmaken om thumbnails mee te maken
  39. $fotobewerking->createthumb($maps.$filename, $filename, $mapt); //thumbnail aanmaken
  40. mysql_query("INSERT INTO alg_screens_".$_GET['project']." (bericht_id, image) VALUES (".$_GET['id'].", '".$filename."')") or die(mysql_error()); //bestandsnaam van het screenshot opslaan in db
  41.  
  42. switch ($_POST['addscreen']) { //controleren of er nog een screenshot moet worden toegevoegd
  43. case true:?>
  44. <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>?id=<?php echo $_GET['id']."&project=".$_GET['project'];?>" ENCTYPE="multipart/form-data">
  45. <table border=0><tr><th>Screenshot</th><td><input type="file" name="bestand"></td></tr>
  46. <tr><th>Nog een screenshot toevoegen:</th><td><input type="checkbox" name="addscreen" value="true"></td></tr>
  47. <tr><td colspan="2"><center><input type="submit" name="submitscreen" value="Toevoegen"></center></td></tr></table></form>
  48. <?php break;
  49. default: //alle screenshots zijn toegevoegd
  50. echo "De screenshots werden toegevoegd - <a href='screenoverzicht.php?lang=nl'>Terug naar het overzicht</a> - <a href='home.php'>Admin home</a>";
  51.  
  52. }
  53.  
  54. }
  55.  
  56. elseif($_GET['edit']) { //Kijken of bij het wijzigen van een bericht screenshots moeten toegevoegd worden ?>
  57. <form method="post" action="addscreens.php?id=<?php echo $_GET['id']."&project=".$_GET['project'];?>" ENCTYPE="multipart/form-data">
  58. <table border=0><tr><th>Screenshot</th><td><input type="file" name="bestand"></td></tr>
  59. <tr><th>Nog een screenshot toevoegen:</th><td><input type="checkbox" name="addscreen" value="true"></td></tr>
  60. <tr><td colspan="2"><center><input type="submit" name="submitscreen" value="Toevoegen"></center></td></tr></table></form>
  61. <?php
  62. }
  63.  
  64. else { //bij eerste keer laden van de pagina het formulier voor het bericht weergeven
  65. $project_query = mysql_query("SELECT * FROM projecten"); ?>
  66.  
  67. <form method="POST" action="<?php echo $_SERVER['PHP_SELF'];?>" ENCTYPE="multipart/form-data">
  68. <table>
  69. <tr>
  70. <td>Datum:</td>
  71. <td><input type="text" size="2" name="dag">
  72. <select name="maand">
  73. <option value="1">januari</option>
  74. <option value="2">februari</option>
  75. <option value="3">maart</option>
  76. <option value="4">april</option>
  77. <option value="5">mei</option>
  78. <option value="6">juni</option>
  79. <option value="7">juli</option>
  80. <option value="8">augustus</option>
  81. <option value="9">september</option>
  82. <option value="10">oktober</option>
  83. <option value="11">november</option>
  84. <option value="12">december</option>
  85. </select>
  86. <input type="text" size="4" name="jaar">
  87. </td></tr>
  88. <tr>
  89. <td>Project:</td>
  90. <td><select name="project">
  91. <?php while($projecten = mysql_fetch_assoc($project_query)) { ?>
  92. <option value="<?php echo $projecten['project']; ?>">
  93. <?php echo strtoupper(str_replace("_"," ",$projecten['project'])); ?></option><?php } ?></td></tr>
  94. <tr>
  95. <th colspan="2">Nederlands</th>
  96. </tr>
  97. <tr>
  98. <td>Titel:</td>
  99. <td><input type="text" size="30" name="nl_titel"></td></tr>
  100. <tr>
  101. <td>Bericht:</td>
  102. <td><textarea rows="6" cols="40" name="nl_bericht"></textarea></td></tr>
  103. <th colspan="2">Engels</th>
  104. <tr>
  105. <td>Titel:</td>
  106. <td><input type="text" size="30" name="en_titel"></td></tr>
  107. <tr>
  108. <td>Bericht:</td>
  109. <td><textarea rows="6" cols="40" name="en_bericht"></textarea></td></tr>
  110. <tr><td colspan="2"><input type="submit" name="submitbericht" value="Toevoegen"></td></tr></table>
  111. <input type="hidden" name="addscreen" value="true">
  112. </form>
  113. <?php
  114. } ?>


de functie om de thumbnail aan te maken is de volgende:

  1. <?php function createthumb($file, $filename, $thumbfolder)
  2. {
  3. $this->newfile = $thumbfolder."thumb_".$filename;
  4. $this->foto = imagecreatefromjpeg($file);
  5. $this->thumb = imagecreatetruecolor(80,60);
  6.  
  7. list($this->width, $this->height) = getimagesize($file);
  8.  
  9. imagecopyresized($this->thumb, $this->foto, 0, 0, 0, 0, 80, 60, $this->width, $this->height);
  10. imagejpeg($this->thumb, $this->newfile, 100);
  11.  
  12. } ?>


De functies om te uploaden via ftp:

  1. <?php function connect($host, $login, $paswoord) { //Functie om verbinding te maken met ftp server
  2.  
  3. if(!$this->connect_id = ftp_connect($host)) { //verbinding openen
  4. return 0;
  5. }
  6. elseif(!ftp_login($this->connect_id, $login, $paswoord)) { //inloggen
  7. return 0;
  8. }
  9. else {
  10. ftp_pasv($this->connect_id, true);
  11. return $this->connect_id;
  12. //Passive connection aanzetten en timeout instellen
  13. }
  14. }
  15.  
  16. function makedir($map, $chmod) { //functie om mappen aan te maken
  17.  
  18. switch($this->stream = $this->connect($GLOBALS['ftp_host'], $GLOBALS['ftp_login'], $GLOBALS['ftp_paswoord'])) {
  19. case 0:
  20. return 0;
  21. break;
  22.  
  23. default:
  24. if(ftp_mkdir($this->stream, $map)) {
  25. return 1;
  26. //map aanmaken en chmod instellen
  27. }
  28.  
  29. else {
  30. return 0;
  31. }
  32. }
  33. ftp_close($this->stream);
  34.  
  35. }
  36.  
  37. function uploadfile($map, $file, $filename, $mode) {
  38. switch ($mode) {
  39. case "binary":
  40. $this->ftp_mode = FTP_BINARY;
  41. break;
  42.  
  43. case "ascii":
  44. $this->ftp_mode = FTP_ASCII;
  45. break;
  46. }
  47. switch($this->stream = $this->connect($GLOBALS['ftp_host'], $GLOBALS['ftp_login'], $GLOBALS['ftp_paswoord'])) {
  48. case 0:
  49. return 0;
  50. break;
  51.  
  52. default:
  53. if(ftp_chdir($this->connect_id, $map) AND ftp_put($this->connect_id, $filename, $file, $this->ftp_mode)) {
  54. return 1;
  55. }
  56. else {
  57. return 0;
  58. }
  59. }
  60. ftp_close($this->stream);
  61. } ?>


Ziet iemand misschien het probleem waarom het niet werkt? Voor de server in safe mode gezet werd en het werkte via move_uploaded_file werkte het perfect:\Ik heb al lang zitten zoeken maar lijk het maar niet te vinden...
Alvast bedankt

2 antwoorden

Gesponsorde links
Offline Sc0tTy - 29/09/2005 14:46
Avatar van Sc0tTy PHP interesse wat is de foutmelding ?
Offline viezevis - 29/09/2005 16:44
Avatar van viezevis HTML interesse Ik kreeg geen foutmelding, maar heb het ondertussen dan toch opgelost gekregen. Na heel lang te zoeken en proberen bleek het te liggen aan het feit dat bij het maken van die thumbnails de memory_limit van 8M werd overschreden als de screenshot te groot was. Heb het opgelost op de volgende manier:


  1. <?php $imageInfo = GetImageSize($_FILES['bestand']['tmp_name']);
  2. $memoryNeeded = Round(($imageInfo[0] * $imageInfo[1] * $imageInfo['bits'] * $imageInfo['channels'] / 8 + Pow(2, 16)) * 1.65);
  3. if($memoryNeeded <= 8179000) { ?>


De berekening komt uit een reactie op de php handleiding
In elk geval toch bedankt
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.376s