পিএইচপি - সার্ভারের একটি আলাদা ফোল্ডারে একটি ফাইল সরান


180

আমার ওয়েবসাইটের ব্যবহারকারীদের আর সেগুলি না চাইলে তারা তাদের চিত্রগুলি আপলোড করার পরে সার্ভার থেকে তাদের চিত্রগুলি মুছে ফেলার অনুমতি দেওয়া দরকার। আমি পূর্বে unlinkপিএইচপি-তে ফাংশনটি ব্যবহার করছিলাম তবে তখন থেকে বলা হয়েছিল যে এটি বেশ ঝুঁকিপূর্ণ এবং সুরক্ষা সমস্যা হতে পারে। (নীচের আগের কোড :)

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

পরিবর্তে আমি এখন ফাইলটি অন্য একটি ফোল্ডারে সরাতে চাই। তারা প্রথমে ফাইলটি আপলোড করার পরে তাদের অ্যাকাউন্টে লগইন করার পরে এটি অবশ্যই দীর্ঘ সময় সক্ষম হতে হবে। যদি আমার কাছে প্রধান ফোল্ডার থাকে যা ব্যবহারকারীদের চিত্র (গুলি) সঞ্চয় করে:

user/

এবং তারপরে ডেল নামে একটি ফোল্ডার যা তাদের অযাচিত চিত্রগুলি রাখার গন্তব্য:

user/del/

কোনও ফাইলকে অন্য ফোল্ডারে স্থানান্তরিত করার জন্য কোন আদেশ আছে? সুতরাং যে বলে:

user/image1.jpg

/ হয়ে যায়

user/del/image1.jpg

উত্তর:


418

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");
    }
}

ডক্স থেকে কোড স্নিপেট


নাম পরিবর্তন () এবং অনুলিপি () সহ একটি সমস্যা হ'ল আপনি উদাহরণস্বরূপ তৈরি এবং পরিবর্তিত তারিখের মতো সমস্ত মেটাডেটা হারিয়েছেন .. তা মনে রাখবেন।
Musikdoktor


17

আপনি যদি নতুন ফাইলটিতে ফাইলটি সরল করতে চান তবে মূল ফাইলের নাম রাখুন। এটা ব্যবহার কর:

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

কবজির মতো কাজ করেছেন।
ucMedia

1

কিছু সমাধান হ'ল প্রথমে ফাইলটি অনুলিপি করা (উপরে উল্লিখিত) এবং যখন গন্তব্য ফাইল উপস্থিত থাকে - পূর্ববর্তী স্থানীয়করণ থেকে ফাইলটিকে লিঙ্কমুক্ত করুন। অতিরিক্ত হিসাবে আপনি MD5 চেকসামটি আনলিংক করার আগে নিশ্চিত হতে বৈধতা দিতে পারেন be


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/

দয়া করে এটি আরও ব্যাখ্যা করুন - এই পিএইচপি ব্যবহার করে কীভাবে কাজ করা যায়?
নিকো হাজে


-4

শেল_এক্সেক ('এমভি ফাইলের নাম ডেট_ফাইলেমন');


2
স্ট্যাক ওভারফ্লোতে স্বাগতম! যদিও এই কোড স্নিপেট একটি ব্যাখ্যা সহ প্রশ্নটি সমাধান করতে পারে, সত্যিই আপনার পোস্টের মান উন্নত করতে সহায়তা করে। মনে রাখবেন যে আপনি ভবিষ্যতে পাঠকদের জন্য প্রশ্নের উত্তর দিচ্ছেন, এবং সেই লোকেরা আপনার কোড পরামর্শের কারণগুলি জানেন না। আপনার কোডটি ব্যাখ্যামূলক মন্তব্যে ভিড় না করার চেষ্টা করুন, এটি কোড এবং ব্যাখ্যা উভয়ের পাঠযোগ্যতা হ্রাস করে!
ফিলনার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.