PHP - सर्वर पर एक फ़ाइल को एक अलग फ़ोल्डर में ले जाएं


182

मुझे अपनी वेबसाइट पर उपयोगकर्ताओं को सर्वर से उनकी छवियों को हटाने के बाद उन्हें अपलोड करने की अनुमति देने की आवश्यकता है यदि वे उन्हें अब नहीं चाहते हैं। मैं पहले unlinkPHP में फ़ंक्शन का उपयोग कर रहा था, लेकिन मुझे बताया गया है कि यह काफी जोखिम भरा और सुरक्षा मुद्दा हो सकता है। (पिछला कोड नीचे :)

if(unlink($path.'image1.jpg')){ 
     // deleted
}

इसके बजाय अब मैं फ़ाइल को एक अलग फ़ोल्डर में ले जाना चाहता हूँ। यह एक लंबे समय के बाद किया जाना चाहिए जब वे पहली बार फ़ाइल अपलोड करते हैं तो किसी भी समय वे अपने खाते में लॉग इन करते हैं। यदि मेरे पास मुख्य फ़ोल्डर है जो उपयोगकर्ताओं की छवि संग्रहीत करता है:

user/

और फिर उसके भीतर एक फ़ोल्डर जिसे डेल कहा जाता है, जो उनकी अवांछित छवियों को डालने के लिए गंतव्य है:

user/del/

क्या किसी फ़ाइल को एक अलग फ़ोल्डर में स्थानांतरित करने की आज्ञा है? तो कहते हैं कि:

user/image1.jpg

/ बन जाता है

user/del/image1.jpg

जवाबों:


421

renameसमारोह करता है

डॉक्स का नाम बदला

rename('image1.jpg', 'del/image1.jpg');

यदि आप मौजूदा फ़ाइल को उसी स्थान पर रखना चाहते हैं जिसका आपको उपयोग करना चाहिए copy

डॉक्स कॉपी

copy('image1.jpg', 'del/image1.jpg');

यदि आप किसी अपलोड की गई फ़ाइल का उपयोग करना चाहते हैं move_uploaded_file, हालांकि यह लगभग समान है क्योंकि renameयह फ़ंक्शन यह भी जांचता है कि दी गई फ़ाइल एक फ़ाइल है जिसे इसके माध्यम से अपलोड किया गया था POST, यह उदाहरण के लिए रोकता है कि एक स्थानीय फ़ाइल ले जाया गया है

डॉक्स मूव_अपलोडेड_फाइल

$uploads_dir = '/uploads';
foreach ($_FILES["pictures"]["error"] as $key => $error) {
    if ($error == UPLOAD_ERR_OK) {
        $tmp_name = $_FILES["pictures"]["tmp_name"][$key];
        $name = $_FILES["pictures"]["name"][$key];
        move_uploaded_file($tmp_name, "$uploads_dir/$name");
    }
}

डॉक्स से कोड स्निपेट


नाम बदलने () और कॉपी () के साथ एक समस्या यह है कि आपने सभी मेटाडेटा खो दिए हैं, जैसे कि उदाहरण के लिए बनाई गई और संशोधित तिथि।
मुसिकदोक्टर


17

यदि आप फ़ाइल को मूल फ़ाइल नाम के साथ नए पथ में ले जाना चाहते हैं। इसे इस्तेमाल करो:

$source_file = 'foo/image.jpg';
$destination_path = 'bar/';
rename($source_file, $destination_path . pathinfo($source_file, PATHINFO_BASENAME));

एक जादू की तरह काम किया।
ucMedia

1

कुछ समाधान सबसे पहले फ़ाइल को कॉपी करना है (जैसा कि ऊपर बताया गया है) और जब गंतव्य फ़ाइल मौजूद है - पिछले स्थानीयकरण से फ़ाइल को अनलिंक करें ()। इसके अतिरिक्त आप सुनिश्चित होने से पहले एमडी 5 चेकसम को अनलिंक करने से पहले सत्यापित कर सकते हैं


1

इसे स्थानांतरित करने के लिए एक फ़ंक्शन बनाएं:

function move_file($file, $to){
    $path_parts = pathinfo($file);
    $newplace   = "$to/{$path_parts['basename']}";
    if(rename($file, $newplace))
        return $newplace;
    return null;
}

1

मैं शेल का उपयोग करके सभी डेटा फ़ाइल पढ़ता हूं फिर सरणी पर असाइन करता हूं। फिर मैं शीर्ष स्थिति में फ़ाइल ले जाता हूं।

i=0 
for file in /home/*.gz; do
    $file
    arr[i]=$file
    i=$((i+1)) 
done 
mv -f "${arr[0]}" /var/www/html/

कृपया समझाएं कि आगे - PHP का उपयोग करके यह कैसे काम कर सकता है?
निको हसे


-4

shell_exec ('mv फ़ाइल नाम dest_filename');


2
ढेर अतिप्रवाह में आपका स्वागत है! हालांकि यह कोड स्निपेट प्रश्न को हल कर सकता है, जिसमें स्पष्टीकरण सहित वास्तव में आपकी पोस्ट की गुणवत्ता में सुधार करने में मदद करता है। याद रखें कि आप भविष्य में पाठकों के लिए प्रश्न का उत्तर दे रहे हैं, और उन लोगों को आपके कोड सुझाव के कारणों का पता नहीं चल सकता है। कृपया अपने कोड को व्याख्यात्मक टिप्पणियों के साथ भीड़ न दें, इससे कोड और स्पष्टीकरण दोनों की पठनीयता कम हो जाती है!
फाइलन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.