File upload

Μια περιοχή όπου τα μέλη μας μπορούν να βάζουν τα PHP scripts που έχουν φτιάξει και θέλουν να τα μοιραστούν με τα υπόλοιπα μέλη.

Συντονιστές: Super-Moderators, WebDev Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
vassilism
Δημοσιεύσεις: 1948
Εγγραφή: 17 Μαρ 2007 14:47
Επικοινωνία:

File upload

Δημοσίευση από vassilism » 11 Μάιος 2008 20:50

Μιας και βλέπω διάφορα post σχετικά με file upload, είπα να μοιραστώ μαζί σας ένα script που είχα φτιάξει με την βοήθεια πολλών συμφορουμίτων.

Το script αποθηκεύει αρχεία σε έναν φάκελο του server και κρατάει στοιχεία τους σε μια βάση δεδομένων.

Ξεκινώντας θα δημιουργήσουμε μια βάση δεδομένων με όνομα data_base και θα εισάγουμε τον παρακάτω πίνακα:

Κώδικας: Επιλογή όλων

CREATE TABLE `upload_files` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `name` varchar(20) collate utf8_unicode_ci NOT NULL,  
  `upload_path` varchar(80) collate utf8_unicode_ci NOT NULL,
  `file_name` varchar(30) collate utf8_unicode_ci NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1;
Επίσης θα φτιάξουμε στο root του server μας τους φακέλους upload_files/files/.
Στην συνέχεια θα φτιάξουμε ένα αρχείο που θα πραγματοποιεί την σύνδεση με τη βάση δεδομένων.
dbconnect.php

Κώδικας: Επιλογή όλων

<?php 
mysql_connect&#40;'localhost', 'user', 'pass'&#41;or die&#40;"cannot connect"&#41;; 
mysql_select_db&#40;'data_base'&#41;;
mysql_query&#40;"SET NAMES 'utf8'"&#41;; 
?>
Παρακάτω δημιουργούμε ένα αρχείο που περιέχει την φόρμα μας.
upload_form.php

Κώδικας: Επιλογή όλων

<html> 
   <head> 
   <meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
      <title>Νέα εγγραφή</title> 
   </head> 
   <body>
<form method="post" enctype="multipart/form-data" action="upload.php"><td width="78%"><table width="447" border="0">
    <tr>
      <td width="158" scope="col">Όνομα &#58;</td>
      <th width="279" scope="col"><div align="left">
        <input class=formfield name="name" rows=10 cols=40 wrap size="20">
      </div></th>
    </tr>
    <tr>
      <td>Αναζήτηση αρχείου &#58;</td>
      <td><div align="left">
          <input class=formbutton type="file" name="file" size="20" />
      </div></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><input type="submit" value="Αποθήκευση" /> 
        <input name="reset" type="reset" value="Καθαρισμός" id="reset" /></td>
    </tr>
  </table>
   </form> 
</body> 
</html>
Στην συνέχεια ακολουθεί το script που ανεβάζει το αρχείο στον server και αποθηκεύει στοιχεία στην βάση δεδομένων.
upload.php

Κώδικας: Επιλογή όλων

<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
<TITLE>Νέα εγγραφή</TITLE>
</HEAD>
<BODY>
<?php 
include &#40;'dbconnect.php'&#41;;

      	//edo orizete to path gia ton fakalo pou apothikeuontai ta arxeia
		$upload_path = $_SERVER&#91;'DOCUMENT_ROOT'&#93;."/upload_files/files/";
		$upload_path2 = $_SERVER&#91;'ROOT'&#93;."/upload_files/files/";
		
        $id = $_POST&#91;"id"&#93;;
		$name = $_POST&#91;"name"&#93;;  
		
if &#40;count&#40;$_FILES&#91;'file'&#93;&#41;&#41; &#123; 
      $tmp_name = $_FILES&#91;'file'&#93;&#91;'tmp_name'&#93;; 
      $file_name = $_FILES&#91;'file'&#93;&#91;'name'&#93;; 
      $size = $_FILES&#91;'file'&#93;&#91;'size'&#93;; 
	  //edo orizete to megethos arxeiou
      $size = &#40;$size >= 1024&#41; ? floor&#40;$size / 1024&#41; . "kbytes" &#58; $size . "bytes";
	   
//edo orizete to eidos arxeiou pou thelete na epitrepontai
$allowed_ext = array&#40;"gif", "GIF", "png", "jpg", "JPG", "jpeg", "tif", "mpeg", "wma", "xls", "doc", "mp3"&#41;;        
if &#40;!in_array&#40;substr&#40;$file_name,strlen&#40;$file_name&#41;-3,strlen&#40;$file_name&#41;&#41;, $allowed_ext&#41;&#41;&#123; 
   echo "Δεν καταχωρήθηκε αρχείο.<br>Το αρχείο " . $file_name . " δεν επιτρέπετε.";
   echo "<p><a href=\"javascript&#58;history.back&#40;-1&#41;;\">&#91;Πίσω&#93;</a></p>";  
   exit; 
&#125;
    
if &#40;file_exists&#40;$upload_path . "/" . $file_name&#41;&#41; &#123; 
echo "Το αρχείο δεν καταχωρήθηκε.<br>Το αρχείο που επιλέξατε υπάρχει ήδη.<br>Αλλάξτε το όνομα του αρχείου και προσπαθήστε ξανά.";
echo "<p><a href=\"javascript&#58;history.back&#40;-1&#41;;\">&#91;Πίσω&#93;</a></p>";  
exit;  
         &#125; 
         if &#40;move_uploaded_file&#40;$tmp_name,$upload_path . "/" . $_FILES&#91;'file'&#93;&#91;'name'&#93;&#41;&#41; &#123; 
            echo "Το αρχείο καταχωρήθηκε επιτυχώς.<br /><br />Όνομα αρχείου&#58; " . $file_name . "<br />Μέγεθος&#58; " . $size; 
         &#125; else &#123; 
            echo "Δεν ήταν δυνατή η καταχώρηση του αρχείου."; 
         &#125; 
      &#125; else &#123; 
         echo "Δεν ήταν δυνατή η καταχώρηση του αρχείου."; 
      &#125; 	
	    //Create query        
		$query = "insert into upload_files values &#40;'".$id."','".$name."','".$upload_path2."','".$file_name."'&#41;"; 
		$result = mysql_query&#40;$query&#41;;             
        echo&#40; "<P>Η εγγραφή  καταχωρήθηκε.</P>" &#41;;  
?> 
</BODY>
</HTML>
Τέλος δημιουργούμε ένα script για να μπορούμε να βλέπουμε τα αρχεία που έχουμε ανεβάσει.
print.php

Κώδικας: Επιλογή όλων

<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
<TITLE>Files</TITLE>
</HEAD>
<BODY>
<?php 
include &#40;'dbconnect.php'&#41;;

$qp1 = "SELECT * FROM `upload_files`"; 
$getData = mysql_query&#40;$qp1&#41;; 

while &#40;$rows = mysql_fetch_assoc&#40;$getData&#41;&#41; 
&#123; 
if &#40;$rows&#91;'id'&#93;==null&#41;  &#123; 
echo&#40;""&#41;; &#125; 
else &#123;
echo&#40;"Κωδικός&#58; ".$rows&#91;"id"&#93;&#41;; &#125; 

if &#40;$rows&#91;'name'&#93;==null&#41;  &#123; 
echo&#40;""&#41;; &#125; 
else &#123;
echo&#40;" Όνομα&#58; ".$rows&#91;"name"&#93;." "&#41;;  &#125;
  
if &#40;$rows&#91;'file_name'&#93;==null&#41;  &#123; 
echo&#40;" Δεν υπάρχει αρχείο"&#41;; &#125; 
else &#123;
echo &#40;"<a href=\"&#123;$rows&#91;'upload_path'&#93;&#125;&#123;$rows&#91;'file_name'&#93;&#125;\">link</a>"&#41;; &#125; 
echo '<br>';
&#125; 
?> 
</BODY>
</HTML>
Συνημμένα
file_upload.zip
(3.13 KiB) Μεταφορτώθηκε 960 φορές
Τελευταία επεξεργασία από το μέλος vassilism την 03 Ιουν 2008 17:41, έχει επεξεργασθεί 3 φορές συνολικά.

Άβαταρ μέλους
MaZz
Script Master
Δημοσιεύσεις: 345
Εγγραφή: 20 Ιούλ 2005 19:41
Τοποθεσία: Beyond the dark sun
Επικοινωνία:

File upload

Δημοσίευση από MaZz » 24 Μάιος 2008 21:42

Κώδικας: Επιλογή όλων

$size = &#40;$size >= 5024&#41; ? floor&#40;$size / 5024&#41; . "kbytes" &#58; $size . "bytes";
Κάτι δεν μου κάθεται καλά εδώ.
Για μετατροπή από bytes σε kbytes διαιρείς με το 5024? Θα μας κάψει ο Θεός :P

Άβαταρ μέλους
vassilism
Δημοσιεύσεις: 1948
Εγγραφή: 17 Μαρ 2007 14:47
Επικοινωνία:

File upload

Δημοσίευση από vassilism » 24 Μάιος 2008 21:56

Σωστός :victory:

Άβαταρ μέλους
MaZz
Script Master
Δημοσιεύσεις: 345
Εγγραφή: 20 Ιούλ 2005 19:41
Τοποθεσία: Beyond the dark sun
Επικοινωνία:

File upload

Δημοσίευση από MaZz » 24 Μάιος 2008 22:10

Γράψε αν θες και τα topics στα οποία βασίστηκε για να συγκρίνουμε τις αλλαγές που έκανες :P

Άβαταρ μέλους
vassilism
Δημοσιεύσεις: 1948
Εγγραφή: 17 Μαρ 2007 14:47
Επικοινωνία:

File upload

Δημοσίευση από vassilism » 25 Μάιος 2008 00:03

Καλό θα ήταν για να είναι και λίγο μαζεμένα, αλλά δεν τα έχω κρατήσει.
Πάνε μήνες από τότε που το έφτιαξα, είχα ανοίξει περίπου 20 θέματα με διάφορες ερωτήσεις.

Άβαταρ μέλους
Pavel
Honorary Member
Δημοσιεύσεις: 1046
Εγγραφή: 08 Αύγ 2003 00:05
Τοποθεσία: UK

File upload

Δημοσίευση από Pavel » 25 Μάιος 2008 00:45

Παρατήρηση ως προς την ασφάλεια του script.

Εάν έχετε σκοπό να το χρησιμοποιήσετε στην σελίδα σας, να φροντίσετε να μετονομάζετε το αρχείο πριν το αποθηκεύσετε.

Δεν το λέω για να αποφύγετε το σφάλμα "το αρχείο υπάρχει ήδη" αλλά την εκτέλεση κώδικα μέσα από αρχεία εικόνας.

Ας υποθέσουμε ότι κάποιος φτιάχνει ένα αρχείο και γράφει μέσα:

Κώδικας: Επιλογή όλων

<?php
phpinfo&#40;&#41;;
?>
και το αποθηκεύει ως: mypic.php.jpeg
Αν το ανεβάσει σε οποιοδήποτε server και μείνει με το ίδιο όνομα, τότε αν γράψει στο address bar την ακριβή διεύθυνση της φωτογραφίας (www.site.com/mypic.php.jpeg) θα εκτελεστεί κανονικότατα ο κώδικας του αρχείου.

Μια εύκολη λύση είναι να αντικαταστήσουμε τυχόν τελείες που υπάρχουν πριν το extension.

Αυτάααααααααααααααα :P
Εσύ είσαι τρελός.

Άβαταρ μέλους
MaZz
Script Master
Δημοσιεύσεις: 345
Εγγραφή: 20 Ιούλ 2005 19:41
Τοποθεσία: Beyond the dark sun
Επικοινωνία:

File upload

Δημοσίευση από MaZz » 25 Μάιος 2008 00:46

ok τότε ;)
If nothing in the world can change our children will inherit nothing.

Άβαταρ μέλους
Marinos Stergiou
Δημοσιεύσεις: 741
Εγγραφή: 12 Νοέμ 2006 14:49
Τοποθεσία: Τριτοκοσμική

File upload

Δημοσίευση από Marinos Stergiou » 25 Μάιος 2008 15:14

Σε συνέχεια του αρχικού post παραθέτω έναν κώδικα χρήσιμο για ανέβασμα φωτογραφίας σε πίνακα - Binary μορφή - τύπο Blob
Χρήσιμο βοήθημα για όσους θέλουν να ανεβάζουν είκόνες σε Forum μια και μπορεί με λίγες τροποποιήσεις χρησιμοποιώντας σαν κλειδί την περιγραφή να εμφανίζει κάτω από κάθε post τις φωτογραφίες.
Το πρόγραμμα στην ουσία καλεί τις εικόνες με έναν κωδικό (file=νούμερο φωτογραφίας)
Μπορείτε να ορίσετε το μέγιστο μέγεθος εικόνας κα με κάποιες τροποποιήσεις να μην φορτώνεται εικόνα μεγαλύτερη κάποιου μεγέθους.
Το Default (αν θυμάμαι καλά - που παραθέτω κόβει τις εικόνες στο αντίστοιχο μέγεθος)

Καταρχήν δημιουργούμε τον πίνακα

Κώδικας: Επιλογή όλων

-- Δομή Πίνακα για τον Πίνακα `files`
-- 

CREATE TABLE `files` &#40;
  `id` int&#40;11&#41; unsigned NOT NULL auto_increment,
  `shortName` varchar&#40;50&#41; default NULL,
  `mimeType` varchar&#40;30&#41; default NULL,
  `mimeName` varchar&#40;50&#41; default NULL,
  `fileContents` blob NOT NULL,
  PRIMARY KEY  &#40;`id`&#41;,
  UNIQUE KEY `ID` &#40;`id`&#41;,
  KEY `shortName` &#40;`shortName`&#41;,
  KEY `mimeType` &#40;`mimeType`&#41;,
  KEY `mimeName` &#40;`mimeName`&#41;
&#41; TYPE=MyISAM AUTO_INCREMENT=1 ;
To αρχείο "connect.inc" έχει τα στοιχεία για την σύνδεση με την βάση - πινακα

Κώδικας: Επιλογή όλων

<?php
$hostName = "localhost&#58;3306";
$username = "user name"; //Βάλτε το ανίστοιχο
$password = "pass"; // Βάλτε το αντίστοιχο

function showerror&#40;&#41;
&#123;
   if &#40;mysql_error&#40;&#41;&#41;
      die&#40;"Error " . mysql_errno&#40;&#41; . " &#58; " . mysql_error&#40;&#41;&#41;;
   else
      die&#40;"Could not connect to the DBMS"&#41;;
&#125;

function clean&#40;$input, $maxlength&#41;
&#123;
  $input = substr&#40;$input, 0, $maxlength&#41;;
  $input = EscapeShellCmd&#40;$input&#41;;
  return &#40;$input&#41;;
&#125;

?>
Το αρχείο που κάνει αναζήτηση και αποστολή της εικόνας (insert_image.php)

Κώδικας: Επιλογή όλων

<?php
include 'connect.inc';

  if &#40;empty&#40;$short&#41; || empty&#40;$userfile&#41;&#41;
  &#123;
?>
    <html>
    <head>
      <title>Αναζήτηση - Αποθήκευση Εικόνας</title>
</head>
<body bgcolor="#C6E2FF" text="#003366">
<form method="post" action="insert_image.php" enctype="multipart/form-data" name="insert">
  <tr> 
    <td align="left" width="130" nowrap bgcolor="<?echo $fSettings&#91;"msg_backcolor"&#93;?>"><b><br>
      Περιγραφή Φωτογραφίας&#58;</b></td>
    <td align="left" width="100%" bgcolor="<?echo $fSettings&#91;"msg_backcolor"&#93;?>"><b> <?echo $short?></b>
      <input type="text" name="short"  size=50  value="<?echo $short?>" >
    </td></tr>
  <tr><br><br>
    <td align="left" width="130" nowrap bgcolor="<?echo $fSettings&#91;"msg_backcolor"&#93;?>"><b>Αρχείο 
      Εικόνας&#58;</b></td>
    <td align="left" width="100%" bgcolor="<?echo $fSettings&#91;"msg_backcolor"&#93;?>">
      <input name="userfile" type="file">
    </td></tr><tr><td>
      <input type="submit" value="Αποθήκευση">
    </td></tr>
    <input type="hidden" name="MAX_FILE_SIZE" value="30000">
    </form> 
    </html>
<?php    
  &#125;
  else 
  &#123;
     $short = clean&#40;$short, 50&#41;;
     $userfile = clean&#40;$userfile, 50&#41;;

     if &#40;!&#40;$connection = @ mysql_pconnect&#40;$hostName, 
                                         $username, 
                                         $password&#41;&#41;&#41;
        showerror&#40;&#41;;

     if &#40;!mysql_select_db&#40;"onoma_dp", $connection&#41;&#41;
        showerror&#40;&#41;;

     // Was a file uploaded?
     if &#40;is_uploaded_file&#40;$userfile&#41;&#41;
     &#123;
       
       switch &#40;$userfile_type&#41;
       &#123;
          case "image/gif";       
             $mimeName = "GIF Image";
             break;
          case "image/pjpeg";          
             $mimeName = "jpeg Image";
             break;
          case "image/jpeg";          
             $mimeName = "jpeg Image";
             break;			 
          case "image/png";       
             $mimeName = "PNG Image";
             break;
          case "image/x-MS-bmp";       
             $mimeName = "Windows Bitmap";
             break;
          default&#58; 
             $mimeName = "Unknown image type";
       &#125;
   
       $file = fopen&#40;$userfile, "r"&#41;; 
       $fileContents = fread&#40;$file, filesize&#40;$userfile&#41;&#41;; 
       $fileContents = AddSlashes&#40;$fileContents&#41;;
     &#125;  
     else
       $fileContents = NULL;

     $insertQuery = "INSERT INTO files VALUES &#40;NULL, \"&#123;$short&#125;\",
         \"&#123;$userfile_type&#125;\", \"&#123;$mimeName&#125;\", \"&#123;$fileContents&#125;\"&#41;";

     if &#40;&#40;@ mysql_query &#40;$insertQuery, $connection&#41;&#41; 
         && @ mysql_affected_rows&#40;&#41; == 1&#41;
       header&#40;"Location&#58; receipt.php?status=T&file="
         . mysql_insert_id&#40;$connection&#41;&#41;;
     else
       header&#40;"Location&#58; receipt.php?status=F&file=" 
         . mysql_insert_id&#40;$connection&#41;&#41;;  
  &#125; // if else empty&#40;&#41;

 ?>

Αρχείο παραλαβής εικονας - receipt.php

Κώδικας: Επιλογή όλων

    <!DOCTYPE HTML PUBLIC 
               "-//W3C//DTD HTML 4.0 Transitional//EN"
               "http&#58;//www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
      <title>Αρχείο Παραλαβής Εικόνας</title>
    </head>
    
<body bgcolor="#C6E2FF" text="#003366">
<?php
  include 'connect.inc';  
  $status = clean&#40;$status, 1&#41;;
  $file = clean&#40;$file, 5&#41;;
  switch &#40;$status&#41;
  &#123;
  case "T"&#58;
     $query = "SELECT shortName, mimeName FROM files WHERE id = $file";

     if &#40;!&#40;$connection = @ mysql_pconnect&#40;$hostName, 
                                       $username,
                                       $password&#41;&#41;&#41;
        showerror&#40;&#41;;

     if &#40;!mysql_select_db&#40;"onoma_dp", $connection&#41;&#41;
        showerror&#40;&#41;;
        
     if &#40;!&#40;$result = @ mysql_query &#40;$query, $connection&#41;&#41;&#41;
        showerror&#40;&#41;;

     if &#40;$row = @ mysql_fetch_array&#40;$result&#41;&#41;
     &#123;
?>
<h2>Αρχείο Παραλαβής Εικόνας</h2> 
    <h3>Τα ακόλουθο αρχείο αποθηκεύτηκε με επιτυχία&#58;</h3>
    
<table width="100%">
  <col span="1" align="right"> 
  <tr> 
    <td width="241"><font color="red">Περιγραφή&#58;</font></td>
    <td width="242"> 
      <?php echo "&#123;$row&#91;"shortName"&#93;&#125;";?>
    </td>
  </tr>
  <tr>
    <td width="241"><font color="red">Κωδικός Φωτογραφίας&#58;</font></td>
    <td width="242">
      <?php echo "&#123;$file&#125;";?>
    </td>
  </tr>
  <tr> 
    <td width="241"><font color="red">Τύπος φωτογραφίας&#58;</font></td>
    <td width="242"> 
      <?php echo "&#123;$row&#91;"mimeName"&#93;&#125;";?>
    </td>
  </tr>
  <tr> 
    <td width="241"><font color="red">File&#58;</font></td>
    <td width="242"> 
      <?php echo "<img src=\"view.php?file=&#123;$file&#125;\">";?>
    </td>
  </tr>
</table>
<?php
     &#125; // if mysql_fetch_array&#40;&#41;

     break;

  case "F"&#58;
     echo "Η Διαδικασία απέτυχε.";
     echo "<br>Επικοινωνήστε με τον Webmaster.";
     break;
  default&#58;
     echo "Φτάσατε απρόσμενα σ' αυτήν την σελίδα.";          
  &#125; // end of switch
?>

</body>
</html>
Αρχείο εμφάνισης εικόνας - view.php

Κώδικας: Επιλογή όλων

<?php
  include 'connect.inc';

  $file = clean&#40;$file, 4&#41;;

  if &#40;empty&#40;$file&#41;&#41;
     exit;

  if &#40;!&#40;$connection = @ mysql_pconnect&#40;$hostName,
                                       $username,
                                       $password&#41;&#41;&#41;
     showerror&#40;&#41;;

  if &#40;!mysql_select_db&#40;"onoma_dp", $connection&#41;&#41;
     showerror&#40;&#41;;

  $query = "SELECT mimeType, fileContents FROM files 
            WHERE id = $file";

  if &#40;!&#40;$result = @ mysql_query &#40;$query,$connection&#41;&#41;&#41;
     showerror&#40;&#41;;  

  $data = @ mysql_fetch_array&#40;$result&#41;;

  if &#40;!empty&#40;$data&#91;"fileContents"&#93;&#41;&#41;
  &#123;
     header&#40;"Content-Type&#58; &#123;$data&#91;"mimeType"&#93;&#125;"&#41;;
     echo $data&#91;"fileContents"&#93;;
   &#125;
?>
Ελπίζω να μήν έκανα κανένα λάθος..
Nα σημειώσω ότι τον κώδικα τον έφτιαξα όταν ήμουν νέος (1999) και σίγουρα μπορεί να γίνει και καλύτερος

Άβαταρ μέλους
vassilism
Δημοσιεύσεις: 1948
Εγγραφή: 17 Μαρ 2007 14:47
Επικοινωνία:

File upload

Δημοσίευση από vassilism » 25 Μάιος 2008 21:06

Πολύ ωραία :D
Μιας που αναφερθήκαμε για εικόνες, παραθέτω ένα πολύ καλό βοήθημα από τον fafo, το οποίο σου φτιάχνει και Thumbnail της εικόνας που ανεβάζεις.
http://www.freestuff.gr/forums/viewtopi ... torder=asc

mariosal
Honorary Member
Δημοσιεύσεις: 1473
Εγγραφή: 09 Νοέμ 2007 23:55

File upload

Δημοσίευση από mariosal » 03 Ιουν 2008 15:16

Λάθη που διαπίστωσα στο αρχικό post:
Επίσης θα φτιάξουμε στο root του server μας τους φακέλους file_upload/files.
Ο αρχικός πρέπει να λέγεται upload_files και όχι file_upload.
$upload_path = $_SERVER['DOCUMENT_ROOT']."/upload_files/files/";
$upload_path2 = $_SERVER['ROOT']."/upload_files/files/";
Εάν δε βγάλεις το μαυρισμένο / από τις δύο σειρές τότε θα βάζει δύο / επειδή έχεις βάλει:
if (move_uploaded_file($tmp_name,$upload_path . "/" . $_FILES['file']['name']))
Έπειτα:
$size = ($size >= 1024) ? floor($size / 1024) . " kbytes" : $size . " bytes";
Διόρθωσε το και στα αρχεία που έχει βάλει για να τα κατεβάσουμε.

Επίσης τα ελληνικά με UTF-8 και PHP δε φαίνονται καλά. Στο print.php είναι οκ, αλλά από το script στον server η ονομασία γίνεται ακαταλαβίστικη.

ISO-8859-7 είναι η κατάλληλη.

Άβαταρ μέλους
MaZz
Script Master
Δημοσιεύσεις: 345
Εγγραφή: 20 Ιούλ 2005 19:41
Τοποθεσία: Beyond the dark sun
Επικοινωνία:

File upload

Δημοσίευση από MaZz » 03 Ιουν 2008 16:40

Pavel έγραψε:Παρατήρηση ως προς την ασφάλεια του script.

Εάν έχετε σκοπό να το χρησιμοποιήσετε στην σελίδα σας, να φροντίσετε να μετονομάζετε το αρχείο πριν το αποθηκεύσετε.

Δεν το λέω για να αποφύγετε το σφάλμα "το αρχείο υπάρχει ήδη" αλλά την εκτέλεση κώδικα μέσα από αρχεία εικόνας.

Ας υποθέσουμε ότι κάποιος φτιάχνει ένα αρχείο και γράφει μέσα:

Κώδικας: Επιλογή όλων

<?php
phpinfo&#40;&#41;;
?>
και το αποθηκεύει ως: mypic.php.jpeg
Αν το ανεβάσει σε οποιοδήποτε server και μείνει με το ίδιο όνομα, τότε αν γράψει στο address bar την ακριβή διεύθυνση της φωτογραφίας (www.site.com/mypic.php.jpeg) θα εκτελεστεί κανονικότατα ο κώδικας του αρχείου.

Μια εύκολη λύση είναι να αντικαταστήσουμε τυχόν τελείες που υπάρχουν πριν το extension.

Αυτάααααααααααααααα :P
Δε νομίζω. Αυτό που θα εμφανίσει είναι μαι κατεστραμμένη εικόνα, εκτός βέβαια και αν έχεις ρυθμίσει στο apache configuration file να εκτελεί τα αρχεία με επέκταση jpg σαν php scripts. Θα υπήρχε πρόβλημα μόνο αν δε γινόταν έλεγχος στις επεκτάσεις των αρχείων.
If nothing in the world can change our children will inherit nothing.

Άβαταρ μέλους
vassilism
Δημοσιεύσεις: 1948
Εγγραφή: 17 Μαρ 2007 14:47
Επικοινωνία:

File upload

Δημοσίευση από vassilism » 03 Ιουν 2008 17:55

MarioSal έγραψε:Λάθη που διαπίστωσα στο αρχικό post:
Όντως ξεφεύγουν πολλά λαθάκια, κάτι ξέρουν και οι ειδικοί που βγάζουν beta εκδόσεις :D
MarioSal έγραψε:Ο αρχικός πρέπει να λέγεται upload_files και όχι file_upload.
Διορθώθηκε :victory:
MarioSal έγραψε:$upload_path = $_SERVER['DOCUMENT_ROOT']."/upload_files/files/";
$upload_path2 = $_SERVER['ROOT']."/upload_files/files/";

Εάν δε βγάλεις το μαυρισμένο / από τις δύο σειρές τότε θα βάζει δύο / επειδή έχεις βάλει:

if (move_uploaded_file($tmp_name,$upload_path . "/" . $_FILES['file']['name'])).
Αυτό δεν προλαβαίνω να το κοιτάξω, αλλά θυμάμαι ότι έτρεχε σωστά.
Αυτό μας περνάει το αρχείο στον φάκελο

Κώδικας: Επιλογή όλων

$upload_path = $_SERVER&#91;'DOCUMENT_ROOT'&#93;."/upload_files/files/";
Και αυτό μας κρατάει το path στην βάση δεδομένων.

Κώδικας: Επιλογή όλων

$upload_path2 = $_SERVER&#91;'ROOT'&#93;."/upload_files/files/";
MarioSal έγραψε:$size = ($size >= 1024) ? floor($size / 1024) . " kbytes" : $size . " bytes";
Διόρθωσε το και στα αρχεία που έχει βάλει για να τα κατεβάσουμε.
Διορθώθηκε :victory:
MarioSal έγραψε:Επίσης τα ελληνικά με UTF-8 και PHP δε φαίνονται καλά. Στο print.php είναι οκ, αλλά από το script στον server η ονομασία γίνεται ακαταλαβίστικη.
ISO-8859-7 είναι η κατάλληλη.
Αυτό είναι πολύ περίεργο :o κανονικά θα έπρεπε να ήταν εντάξει οι γραμματοσειρές.
Κοιτά στον server σου να δεις μήπως έχει οριστεί κάποια default κωδικοποίηση.

mariosal
Honorary Member
Δημοσιεύσεις: 1473
Εγγραφή: 09 Νοέμ 2007 23:55

File upload

Δημοσίευση από mariosal » 03 Ιουν 2008 19:53

Το όνομα του αρχείου δε φαίνεται καλά μέσα στον server.

Θα δοκιμάσω να το ξαναβάλω για να σου πω εάν τρέχει καλά με utf-8.

Άβαταρ μέλους
vassilism
Δημοσιεύσεις: 1948
Εγγραφή: 17 Μαρ 2007 14:47
Επικοινωνία:

File upload

Δημοσίευση από vassilism » 03 Ιουν 2008 20:15

Μήπως γράφεις το όνομα του αρχείου με Ελληνικούς χαρακτήρες?

mariosal
Honorary Member
Δημοσιεύσεις: 1473
Εγγραφή: 09 Νοέμ 2007 23:55

File upload

Δημοσίευση από mariosal » 03 Ιουν 2008 20:41

Ναι.

Απάντηση

Επιστροφή στο “PHP τα δικά μας scripts”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες