2012-04-26 9 views
5

मैंने इस वेबफॉर्म विज़ार्ड को बनाया है, जिसमें कई PHP पेज शामिल हैं। इस कई पृष्ठों में उपयोगकर्ता फॉर्म भर सकते हैं और डेटा अस्थायी रूप से एक सत्र में संग्रहीत हो जाता है और अंतिम पृष्ठ पर सत्रों का उपयोग MYSQL डेटाबेस में सभी डेटा को संग्रहीत करने के लिए किया जाता है। अपलोड की गई फाइल के अपवाद के साथ सब कुछ ठीक काम करता है।PHP सत्र में फोटो अपलोड कैसे स्टोर करें?

एचटीएमएल: wizard_page2

<form name="registratieformulier" method="post" enctype="multipart/form-data" action="sw3.php"> 

    <tr><td>Foto winkel uploaden: </td><td><input type="file" name="uploadfoto"/></td></tr><br /><br /> 

     <tr><td><strong>Omschrijving van winkel:</strong></td>     </tr><br /> 

     <tr><textarea cols="50" rows="7" name="omschrijvingwinkel"></textarea></tr> 
     <input name="pkbedrijven" value="<?php echo($pkbedrijven); ?>" type="hidden" /> 
    <input type="submit" name="stuurfoto" value="Verzenden" /> 

</form> 

पीएचपी: यहाँ मेरी कोड है wizard_last_page

$_FILES['uploadfoto']['name']  = $_SESSION["naamfoto"]; 
    $_FILES['uploadfoto']['tmp_name'] = $_SESSION["tijdelijk"]; 

    $bn = $_SESSION["wn"]; 

    $target_path = "../../winkels/$bn/"; 

     $target_path = $target_path . basename($_FILES['uploadfoto']['name']); 


    move_uploaded_file($_FILES['uploadfoto']['tmp_name'], $target_path)or die("There was an error uploading the file, please try again!"); 
    $foto_path = "http://mywebsite.nl/winkels/$bn/".basename($_FILES['uploadfoto']['name']); 


    $omschrijving = $_SESSION["omschrijving"]; 

    $add = "UPDATE winkelprofiel SET winkelomschrijving='$omschrijving', winkelfoto='$foto_path' WHERE fkBedrijvenID=$pkbedrijven "; 
    $query_upload = mysql_query($add) or die("De winkelfoto en omschrijving konden niet worden opgeslagen"); 

उत्तर

7

$_FILES सरणी केवल फ़ाइल है कि इस अनुरोध में अपलोड किया गया है के बारे में जानकारी रखती है। यदि आप उसी फ़ाइल में कहीं और उस फ़ाइल को सहेजते नहीं हैं, तो अनुरोध के अंत में इसे PHP द्वारा हटा दिया जाएगा। आप सत्र में $_FILES['uploadfoto']['tmp_name'] को बस सहेज नहीं सकते हैं और फ़ाइल को बाद में वहां रहने की उम्मीद है, क्योंकि यह नहीं होगा। $_SESSION में $_FILES में मानों को निर्दिष्ट करने में कोई भी बिंदु नहीं है, यह फ़ाइल को वापस नहीं लाएगा।

आप क्या करने की जरूरत:

  1. अगर अपलोड सफल हुआ था के लिए कदम $_FILES['uploadfoto']['tmp_name'] कहीं और तुरंत
  2. $_SESSION
  3. में स्थान आप के लिए यह स्थानांतरित कर दिया बचाने $_SESSION में उस फ़ाइल के साथ कुछ करना आपकी मल्टी-पेज प्रक्रिया के अंत में ($_FILES के लिए अब कोई आवश्यकता नहीं है)
  4. में पुरानी अपलोड की गई फ़ाइलों को हटाने के लिए कुछ तंत्र है, यदि उपयोगकर्ता सत्र छोड़ देता है और फ़ाइल नेव er
+0

फ़ाइल नाम() या प्रतिलिपि() को स्थानांतरित करने के लिए आप किस फ़ंक्शन का उपयोग करने के लिए सलाह देंगे? –

+1

'move_uploaded_file' – deceze

3

मुझे लगता है कि समस्या यह है कि $ _FILES ['uploadfoto'] ['tmp_name'] पर स्थित फ़ाइल केवल अपलोड होने पर ही उपलब्ध होगी। यहां तक ​​कि आप सत्र में मान संग्रहीत करते हैं, जब आप wizard_last_page पर आते हैं तो फ़ाइल वहां नहीं होगी। आपको POST अनुरोध में तुरंत अपलोड की गई फ़ाइलों को संभालने की आवश्यकता है।

तो आपको फ़ाइल को $ target_path या अपलोड होने पर किसी भी अस्थायी स्थान पर ले जाने की आवश्यकता है, फिर सत्र में $ target_path स्टोर करें ताकि आप बाद में फ़ाइल को wizard_last_page पर एक्सेस कर सकें।

+0

फ़ाइल नाम() या प्रतिलिपि() को स्थानांतरित करने के लिए आप किस फ़ंक्शन का उपयोग करने के लिए सलाह देंगे? –

+0

मैं फ़ाइल को स्थानांतरित करने के लिए नाम बदलें() के साथ जाऊंगा, क्योंकि कॉपी() स्रोत फ़ाइल की प्रति बनाता है। – mask8

1

ठीक है, आप पहले फ़ाइल को एक अस्थायी स्थान में अपलोड कर सकते हैं। फिर अंतिम पृष्ठ पर, फ़ॉर्म सबमिट करने के बाद, आप फ़ाइल को वांछित स्थान पर स्थानांतरित कर सकते हैं और फिर अस्थायी को हटा सकते हैं।

$_SESSION['file'] = $_FILES["file"]["name"]; 

if (file_exists("uploads/" . $_FILES["file"]["name"])) 
     { 
     echo $_FILES["file"]["name"] . " already exists. "; 
     } 
    else 
     { 
     move_uploaded_file($_FILES["file"]["tmp_name"],"uploads/temp/" . $_FILES["file"]["name"]); 
     }; 


//This for the last page. 
$file = file_get_contents("uploads/temp/".$_SESSION['file']); 
file_put_contents("uploads/".$_SESSION['file'], $file); 
1

मैं स्वीकृत उत्तर से असहमत हूं। सत्र सरणी चर में सभी छवियों को स्टोर करने का एक तरीका है। आप छवि डेटा संग्रहीत करने के लिए "file_get_contents" फ़ंक्शन का उपयोग कर सकते हैं।

$_SESSION['imgArrayFile'][] = $_FILES['file']; //Your file infromations 
    $_SESSION['imgArrayName'][] = $_POST["ImgNewNamePlacowki"]; //new name for img 
    $_SESSION['ImgArrayAlt'][] = $_POST["ImgAltPlacowki"]; // alt tags if you use them 
    $_SESSION['obj_image_session'][] = file_get_contents($_FILES['file']['tmp_name']); 
    //above "file_get_contents" function - store image as a long string. 

क्या अन्य इस उद्देश्य के लिए इसे का उपयोग यह आप के लिए काम कर सकते हैं के बारे में सोचने के बावजूद: इस पर एक नजर डालें। सत्र में बड़े डेटा को संग्रहीत करने के साथ कई मुद्दे हैं लेकिन यदि आप छवियां काफी छोटी हैं और आप अपनी सेटिंग्स की सीमा से अवगत हैं, तो आप ठीक होंगे।

से मेरी (काम) परियोजना के साथ

$file= $destination."/".$filename; //images/new.jpg 
$fp=fopen($file,"w"); 
fwrite($fp,$_SESSION['obj_image_session'][$index]); 

उदाहरण अपनी फ़ाइल सहेजें:

<?php 
//$galery_img_folder = "your/new/image/destination"; 

foreach($_SESSION['imgArrayFile'] as $index => $name){ 
    if($_SESSION['imgArrayName'][$index]!="" 
    && $_SESSION['ImgArrayAlt'][$index]!="" 
    && $_SESSION['obj_image_session'][$index]!="" 
){ 

    $allowedExts = array("gif", "jpeg", "jpg", "png"); 
    $temp = explode(".", $_SESSION['imgArrayFile'][$index]["name"]); 
    $extension = end($temp); 
    if ((($_SESSION['imgArrayFile'][$index]["type"] == "image/gif") 
    || ($_SESSION['imgArrayFile'][$index]["type"] == "image/jpeg") 
    || ($_SESSION['imgArrayFile'][$index]["type"] == "image/jpg") 
    || ($_SESSION['imgArrayFile'][$index]["type"] == "image/pjpeg") 
    || ($_SESSION['imgArrayFile'][$index]["type"] == "image/x-png") 
    || ($_SESSION['imgArrayFile'][$index]["type"] == "image/png")) 
    && ($_SESSION['imgArrayFile'][$index]["size"] < 104857600) 
    && in_array($extension, $allowedExts)) 
     { 
      if(isset($_SESSION['imgArrayName'][$index]) && $_SESSION['imgArrayName'][$index]!=""){ 
      $rename = $_SESSION['imgArrayName'][$index]; 
      $rename = $rename.".".end($temp); 
     } 

     if ($_SESSION['imgArrayFile'][$index]["error"] > 0) 
     { 
     echo "Return Error Code: " . $_SESSION['imgArrayFile'][$index]["error"] . "<br>"; 
     } 
     else 
     { 
     $size = display_filesize($_SESSION['imgArrayFile'][$index]["size"]); 
     echo "Upload: " . $_SESSION['imgArrayFile'][$index]["name"] . "<br>"; 
     echo "Type: " . $_SESSION['imgArrayFile'][$index]["type"] . "<br>"; 
     echo "Size: " . ($size) . "<br>"; 
     echo "Temp file: " . $_SESSION['imgArrayFile'][$index]["tmp_name"] . "<br>"; 

     if (file_exists($galery_img_folder."/".$rename)) 
      { 
      $error[] = ''.$rename.' <span class="error" id="error"> this name exsists </span>'; 
      } 
     else 
      { 
      $_FILES["file"]["tmp_name"]=$_SESSION['imgArrayFile'][$index]["tmp_name"]; 
      move_uploaded_file($_FILES["file"]["tmp_name"], $galery_img_folder."/".$rename); 
      //now make use of the file_get_content variables 
      $file= $galery_img_folder."/".$rename; 
      $fp=fopen($file,"w"); 
      fwrite($fp,$_SESSION['obj_image_session'][$index]); 
     } 
      } 
     } 
     } 
    else 
     { 
     $error[] = '<span class="error" id="error"> Niewłaściwy plik </span>'; 
     $maxsixe = display_filesize(104857600); 
     echo "Size: " . ($maxsixe) . "<br>"; 
     } 
    } 
    }//end foreach ! ! ! 
}//end dodawanie zdjecia 
?> 

बेशक आप कुछ छोटा सा संशोधन करना होगा यह अपनी परियोजना के साथ काम करने के लिए, लेकिन मेरे बिंदु आपको यह दिखाने के लिए था कि यह संभव है।

एक अच्छा दिन और खुश कोडिंग है!

+0

यदि आपके कोई प्रश्न हैं ... मुझे बताएं। – DevWL

संबंधित मुद्दे