Λίγο βοήθεια.

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

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

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

Λίγο βοήθεια.

Δημοσίευση από vassilism » 15 Αύγ 2007 19:31

Γεια σε όλους.
Θα ήθελα να κάνω μια ερώτηση.
Έχω φτιάξει το αρχείο upload.php με το οποίο περνάω εικόνες στον φάκελο fotos που υπάρχει στον server, και επίσης μου περνάει το path της εικόνας στην mysql.

upload.php

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

<?php 
                   // 
      	$upload_path = $_SERVER&#91;'DOCUMENT_ROOT'&#93; . "/fotos/";
	$upload_url = "http&#58;//www.lernijuices.com/fotos/";
	  // 
    
   if &#40;count&#40;$_FILES&#91;'file'&#93;&#41;&#41; &#123; 
      $tmp_name = $_FILES&#91;'file'&#93;&#91;'tmp_name'&#93;; 
      $name = $_FILES&#91;'file'&#93;&#91;'name'&#93;; 
      $size = $_FILES&#91;'file'&#93;&#91;'size'&#93;; 
      $size = &#40;$size >= 19024&#41; ? floor&#40;$size / 19024&#41; . "kbytes" &#58; $size . "bytes"; 
   
    
    if &#40;move_uploaded_file&#40;$tmp_name,$upload_path . "/" . $_FILES&#91;'file'&#93;&#91;'name'&#93;&#41;&#41;
     &#123; 
        echo "Το αρχείο καταχωρήθηκε<br /><br />Όνομα αρχείου&#58; " .$name . "<br />Μέγεθος&#58;  " . $size; 
     &#125; 
	 else 
	 &#123; 
                 echo "Den epilexthike arxeio<br />"; 
                 &#125; 
                 &#125; 
	 else
	 &#123; 
                 echo "Adinati kataxorisi "; 
                 &#125; 
  
 
        $kodikos = $_POST&#91;"kodikos"&#93;;
		 
    	//Create a connection to MySQL and select "my_db" database
        $con = mysql_connect&#40;"localhost","db","pas"&#41; 
        or die&#40; 'Could not connect to DB&#58; ' . mysql_error&#40;&#41; &#41;;
        mysql_select_db&#40;"lernijui_epafes", $con&#41; or die&#40;mysql_error&#40;&#41;&#41;;
        mysql_query&#40;"SET NAMES 'utf8'", $con&#41;;

			
         //Create query        
		 $query = "insert into imageuploads values &#40;'".$kodikos."','".$upload_url."".$name."'&#41;"; 
		 $result = mysql_query&#40;$query&#41;; 
            

           &#123; 
		  
              echo&#40; "<P>Η εγγραφή καταχωρήθηκε</P>" &#41;; 

           &#125;     
?> 
Τώρα φτιάχνω το αρχείο delete_all.php με το οποίο θέλω να διαγράφω και το path από τη βάση αλλά και την εικόνα από τον φάκελο fotos.

delete_all.php

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

<?php 
       // 
      	$upload_path = $_SERVER&#91;'DOCUMENT_ROOT'&#93; . "/fotos/";
	$upload_url = "http&#58;//www.lernijuices.com/fotos/";
 
  
 
       //Create a connection to MySQL and select "my_db" database
        $con = mysql_connect&#40;"localhost","db","pas"&#41; 
        or die&#40; 'Could not connect to DB&#58; ' . mysql_error&#40;&#41; &#41;;
        mysql_select_db&#40;"lernijui_epafes", $con&#41; or die&#40;mysql_error&#40;&#41;&#41;;
        mysql_query&#40;"SET NAMES 'utf8'", $con&#41;;

			
         //Create query 
		 $query = "DELETE FROM `imageuploads` WHERE `imageuploads`.`kodikos`";  
		 $result = mysql_query&#40;$query&#41;; 
             

           &#123; 
		  
              echo&#40; "<P>Οι εγγραφές διαγράφηκαν.</P>" &#41;; 

           &#125;     
?> 
Έχω καταφέρει να διαγράφω από τη βάση το path και αυτό που δεν γνωρίζω είναι πώς να διαγράφω και το αρχείο από το φάκελο fotos.
Ευχαριστώ εκ των προτέρων.

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6230
Εγγραφή: 30 Νοέμ 2004 03:09

Λίγο βοήθεια.

Δημοσίευση από fafos » 15 Αύγ 2007 19:47

unlink('pathtophotos/onoma.jpg');
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

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

Λίγο βοήθεια.

Δημοσίευση από vassilism » 15 Αύγ 2007 23:25

Φίλε Faros σ'ευχαριστώ για την απάντησή σου, αλλά μπορείς να γίνεις λίγο ποιο αναλυτικός γιατί δεν το κατάλαβά?

Άβαταρ μέλους
mrpc
WebDev Moderator
Δημοσιεύσεις: 3393
Εγγραφή: 03 Μάιος 2000 03:00
Τοποθεσία: Εξάρχεια
Επικοινωνία:

Λίγο βοήθεια.

Δημοσίευση από mrpc » 16 Αύγ 2007 08:17

Σου έδωσε την function που θα χρησιμοποιήσεις... ψάξε λίγο στο manual της php για την unlink.

Άβαταρ μέλους
papatzas
Δημοσιεύσεις: 227
Εγγραφή: 03 Δεκ 2005 14:23

Λίγο βοήθεια.

Δημοσίευση από papatzas » 16 Αύγ 2007 15:49

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

function delete_file&#40;$id&#41;
&#123;		
		
		$sql 		= "SELECT upload_name FROM tbl_uploads  WHERE id =".$id; 	
		$result 	=$this-> dbQuery&#40;$sql&#41;;
		$row    	=$this-> dbFetchrow&#40;$result&#41;;
		
		if&#40;$row&#91;'upload_name'&#93;&#41;
		&#123;
			unlink&#40;"$this->upload_path."/". $this->upload_folder."/".$row&#91;'upload_name'&#93;&#41;;
		&#125;
		
		$this-> dbQuery&#40;"DELETE FROM tbl_uploads  WHERE id =$id "&#41; or    die&#40;mysql_error&#40;&#41;&#41;;
		
		
	&#125;
Τελευταία επεξεργασία από το μέλος papatzas την 18 Αύγ 2007 13:40, έχει επεξεργασθεί 3 φορές συνολικά.
:-)

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

Λίγο βοήθεια.

Δημοσίευση από vassilism » 17 Αύγ 2007 02:59

Συγνώμη αν γίνομαι κουραστικός, αλλά δεν τα κατάφερα να το φτιάξω.
Προσπάθησα να προσαρμόσω τον κώδικα που μου έδωσε ο φίλος papatzas στο δικό μου script (delete_all.php), με τα δικά μου πεδία αλλά τίποτα.

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Λίγο βοήθεια.

Δημοσίευση από cpulse » 17 Αύγ 2007 15:21

Να επισημάνω ένα λαθάκι στον αρχικό σου κώδικα στο upload.php. Έχεις

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

$upload_path = $_SERVER&#91;'DOCUMENT_ROOT'&#93; . "/fotos/";
και μετά

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

move_uploaded_file&#40;$tmp_name,$upload_path . "/" . $_FILES&#91;'file'&#93;&#91;'name'&#93;&#41;
Το $upload_path ήδη τελειώνει με /. Δεν χρειάζεται ξανά στο move_uploaded_file().

-----

Την λύση θα πρέπει να την δώσεις εσύ από εκεί γιατί κανείς από εμας δεν έχει πρόσβαση στο file system. Μπορεί με τις πολλές προσπάθειες κάποιο αρχείο να έχει ήδη σβηστεί οπότε θα σου βγάζει παραπλανητικά λάθη.

Ο papatzas σου πρότεινε μια λύση που χρειάζεται objects. Θα πρέπει να προσαρμόσεις τον κώδικα του στα δικά σου μέτρα. Η λογική είναι να διαβάσεις από την βάση τα ονόματα των αρχείων και να τα σβήσεις με την unlink().

Απλά στον κώδικα που δίνει ο papatzas υπάρχει ένα μπέρδεμα με τα \
Όταν βάζουμε back slash (\) πρέπει να τα βάζουμε διπλά, αλλά ειδικά στην PHP ακόμα και στα windows συστήματα το forward slash (/) δουλεύει μια χαρά και δεν χρειάζεται και escape.

μάλλον το σωστό είναι έτσι:

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

unlink&#40;$this->upload_path . "/" . $row&#91;'upload_name'&#93;&#41;;

.. και υπάρχουν και μερικά άλλα θέματα στον κώδικα σου για συζήτηση, αλλά άσχετα με το unlink(). Αν θες πες μου να σου πω γι αυτά.

Άβαταρ μέλους
papatzas
Δημοσιεύσεις: 227
Εγγραφή: 03 Δεκ 2005 14:23

Λίγο βοήθεια.

Δημοσίευση από papatzas » 18 Αύγ 2007 13:53

Nαι έχει δίκιο ο cpulse τα είχα γράψει λίγο πρόχειρα, σου δίνω επίσης μια function για upload ένoς file, για πειραματισμό ,το $this->temp αντικατέστησε το εσύ πχ.. σε $temp για να είναι προσαρμόσιμο στα μέτρα σου

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

function upload_file&#40;$name&#41;
&#123;
    if &#40;is_writeable&#40;$this->folder_main . '/' . $this->folder&#41;&#41; // epistefei true an uparxei i diadromi
    &#123;
        if &#40;is_uploaded_file&#40;$this->temp&#41;&#41;  //  true&#58; an stalthike to arxeio apo html forma
        &#123;
            move_uploaded_file&#40;$this->temp, $this->folder_main . '/' . $this->folder . '/' . $name&#41;; //true&#58;  upload
            @chmod&#40;$this->folder_main . '/' . $this->folder . '/' . $name, 0644&#41;;
        &#125;
            
            if &#40;file_exists&#40;$this->folder_main . '/' . $this->folder . '/' . $name&#41;&#41;  // an yparxei to file sto directory
            &#123;
            	if &#40;file_exists&#40;$this->temp&#41;&#41;
              &#123;
                   unlink&#40;$this->temp&#41;;
              &#125;
                                                      
               return true;
           &#125;
           else
           &#123;
            	return false;
            &#125;
    &#125;
    else
    &#123;
    return false;
    &#125;
&#125;
:-)

Άβαταρ μέλους
_Invisible_
Δημοσιεύσεις: 418
Εγγραφή: 16 Νοέμ 2006 16:47
Τοποθεσία: Greece

Λίγο βοήθεια.

Δημοσίευση από _Invisible_ » 23 Αύγ 2007 16:28

Να βάλω και εγώ ένα function που δουλεύει τέλεια αν έχεις πολλούς καταλόγους μέσα στον "fotos". Αν δοκιμάσεις να σβήσεις έναν κατάλογο με το rmdir() και δεν είναι κενός, τότε θα πάρεις σφάλμα. Αυτό το function, σβήνει όλους τους καταλόγους και τα αρχεία που υπάρχουν στον κατάλογο που έχεις ορίσει:

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

function recursive_remove_directory&#40;$directory, $empty=FALSE&#41;
&#123;
	// if the path has a slash at the end we remove it here
	if &#40;substr&#40;$directory,-1&#41; == '/'&#41;
	&#123;
		$directory = substr&#40;$directory,0,-1&#41;;
	&#125;
  
	// if the path is not valid or is not a directory ...
	if &#40;!file_exists&#40;$directory&#41; || !is_dir&#40;$directory&#41;&#41;
	&#123;
		// ... we return false and exit the function
		return FALSE;

		// ... if the path is not readable
		&#125;
		elseif &#40;!is_readable&#40;$directory&#41;&#41;
		&#123;
			// ... we return false and exit the function
			return FALSE;

			// ... else if the path is readable
		&#125;
		else
		&#123;
			// we open the directory
			$handle = opendir&#40;$directory&#41;;

			// and scan through the items inside
			while &#40;FALSE !== &#40;$item = readdir&#40;$handle&#41;&#41;&#41;
			&#123;
				// if the filepointer is not the current directory
				// or the parent directory
				if&#40;$item != '.' && $item != '..'&#41;
				&#123;
					// we build the new path to delete
					$path = $directory.'/'.$item;
  
					// if the new path is a directory
 					if&#40;is_dir&#40;$path&#41;&#41; 
					&#123;
						// we call this function with the new path
						recursive_remove_directory&#40;$path&#41;;
  
				// if the new path is a file
				&#125;
				else
				&#123;
					// we remove the file
					unlink&#40;$path&#41;;
				&#125;
			&#125;
		&#125;

		// close the directory
		closedir&#40;$handle&#41;;
  
		// if the option to empty is not set to true
		if &#40;$empty == FALSE&#41;
		&#123;
			// try to delete the now empty directory
			if &#40;!rmdir&#40;$directory&#41;&#41;
			&#123;
				// return false if not possible
				return FALSE;
			&#125;
		&#125;
		// return success
		return TRUE;
	&#125;
&#125;
κάνει loop μέσα σε κάθε κατάλογο που βρίσκει (φυσικά σε υπο-καταλόγους από αυτόν όρισες) και ότι αρχείο βρίσκει, το σβήνει ένα-ένα και μόλις "αδειάσει" ο φάκελος, τότε τον σβήνει και συνεχίζει μέχρι να σβήσει όλα τα δεδομένα και όλους τους υποφακέλους (φυσικά θα σβήσει αυτά που του είπες).

Σημείωση: Για να διαγράφεις αρχεία, χρησιμοποιείς το function unlink() που αναφέρθηκε παραπάνω. Για να διαγράφεις directories, χρησιμοποιείς το function rmdir(). Αν όμως το directory δεν είναι κενό, δεν μπορείς να το διαγράψεις με το rmdir, και πρέπει να χρησιμοποιήσεις το παραπάνω function.

Φιλικά,
invisible.

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

Λίγο βοήθεια.

Δημοσίευση από vassilism » 28 Αύγ 2007 19:28

Απελπίστηκα.
Δεν μπορώ να το φτιάξω αυτό το script.
Κάνω αυτό.

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

<?php
$upload_path = $_SERVER&#91;'DOCUMENT_ROOT'&#93; . "/fotos/"; 
$upload_url = "http&#58;//www.lernijuices.com/fotos/"; 
   
//Create a connection to MySQL and select "my_db" database 
        $con = mysql_connect&#40;"localhost","db","pas"&#41; 
        or die&#40; 'Could not connect to DB&#58; ' . mysql_error&#40;&#41; &#41;; 
        mysql_select_db&#40;"lernijui_epafes", $con&#41; or die&#40;mysql_error&#40;&#41;&#41;; 
        mysql_query&#40;"SET NAMES 'utf8'", $con&#41;; 

function delete_file&#40;$id&#41; 
&#123;       
       
      $sql       = "SELECT upload_name FROM tbl_uploads  WHERE id =".$id;     
      $result    =$this-> dbQuery&#40;$sql&#41;; 
      $row       =$this-> dbFetchrow&#40;$result&#41;; 
       
      if&#40;$row&#91;'upload_name'&#93;&#41; 
      &#123; 
         unlink&#40;$this->upload_path . "/" . $row&#91;'upload_name'&#93;&#41;;
      &#125; 
       
      $this-> dbQuery&#40;"DELETE FROM tbl_uploads  WHERE id =$id "&#41; or    die&#40;mysql_error&#40;&#41;&#41;; 
       
       
   &#125;
?> 
Και στην function delete_file προσπαθώ να προσαρμόσω τις δικές μου μεταβλητές.
Μήπως είμαι κάπου λάθος?

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

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

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