পিএইচপি এর মাধ্যমে কোনও ফাইল কীভাবে মুছবেন?


174

যদি ফাইলটি অন্য ডিরেক্টরিতে থাকে তবে আমি কীভাবে আমার সার্ভার থেকে পিএইচপি দিয়ে একটি ফাইল মুছব?

এখানে আমার পৃষ্ঠার লেআউটটি রয়েছে:

  • projects/backend/removeProjectData.php (এই ফাইলটি ডাটাবেসের জন্য আমার সমস্ত এন্ট্রি মুছে দেয় এবং সম্পর্কিত ফাইলটিও মুছে ফেলা উচিত)
  • public_files/22.pdf (ফাইলটি যেখানে অবস্থিত)

আমি unlinkফাংশনটি ব্যবহার করছি :

unlink('../../public_files/' . $fileName);

তবে এটি আমাকে সর্বদা একটি ত্রুটি দেয় যা ফাইলটির অস্তিত্ব নেই। কোন ধারনা?


2
<pre> নিখুঁত পথটি ব্যবহার করুন </
translation

1
আপনি যদি সত্যিকারের পথটি ব্যবহার করে পরীক্ষা করেন না, আপনি সম্ভবত "" পেয়ে যাবেন। এবং ".." নন-ফাইলগুলিও ফাইলের ত্রুটির উপস্থিতি রাখে না
DrogoNevets

1
তবে সাবধান, আপনার ফাইলে যদি একাধিক ফাইলের নাম / সিমলিংক থাকে তবে এটি সম্ভবত আপনার ফাইলটি মুছবে না! আরও তথ্যের জন্য এই থ্রেডটি দেখুন: stackoverflow.com/q/17548906/1114320
স্লিক

উত্তর:


228

নিম্নলিখিত সাহায্য করা উচিত

  • realpath - ক্যানোনিকালাইজড পরম পথের নাম দেয়
  • is_writable - ফাইলের নামটি লিখিতযোগ্য কিনা তা জানায়
  • unlink - একটি ফাইল মুছে ফেলে

রিয়েলপথ দিয়ে আপনার ফাইলপথ চালান, তারপরে ফিরে আসা পথটি লিখিতযোগ্য কিনা তা পরীক্ষা করুন এবং যদি তা হয় তবে এটি লিঙ্কমুক্ত করুন।


7
আমি ভাবছি ডাব্লু 3শুল কীভাবে এটি করছে? w3schools.com/php/func_filesystem_delete.asp
Fr0zenFyr

3
@ গর্ডন আমি দুঃখিত .. আমি এই শব্দটি ভুল ব্যবহার করেছি যা একটি বড় পার্থক্য নিয়েছে .. আমি একমত যে এটি বোকামি ছিল .. তবে আমি যা বোঝানোর চেষ্টা করেছি সেটি একটি কোডিং উদাহরণ আরও সহায়ক হবে .. যদি আমাকে আরও তিনটি লিঙ্ক দেখার প্রয়োজন হয় আপনার উত্তর বুঝতে এটি খুব সহায়ক? ..সরি ভুল শব্দের জন্য আবার .. আমি ইংরেজীভাষী দেশ থেকে নই ... যদিও এটি বাহানা হতে পারে না ...
itতব্রত গৌতম

13
@ রীতব্রতগৌতম "আপনার উত্তরটি বোঝার জন্য যদি আমাকে আরও তিনটি লিঙ্ক ভিজিট করতে হয় তবে এটি খুব সহায়ক?" - হ্যাঁ, তাই কারণ লিঙ্কগুলিতে যাওয়ার পরে আপনি বুঝতে পারবেন যে এটি কীভাবে কাজ করে। আমি যদি আপনাকে কেবল কোডগুলি দিই তবে আপনি বুঝতে পারবেন না কেবল কপি এবং পেস্ট করুন। আপনি তখন কী শিখলেন? কিছুই নেই। তদ্ব্যতীত, এর জন্য কোডটি খুব তুচ্ছ।
গর্ডন

1
@ গর্ডন .. আমি সম্মত .. আপনার মতামত শ্রদ্ধার দাবি .. আপনি এটি অর্জন করেছেন # 185 কে .. মাত্র দুটি দ্রুত প্রশ্ন ... 1> আমি যদি আপনার উত্তরটিকে সম্পূর্ণ হিসাবে বিবেচনা করি তবে এখানে কেন অনেক মডারেটর বলছেন যে আপনারও কিছু কোড সরবরাহ করা উচিত? ... কেবল লিঙ্কগুলি নয় (এটি অনেকগুলি ভোটের কারণ হতে পারে) ... 2> আপনি কিছু কোড রাখলে ভাল হয় না। এখন কার শিখার প্রবণতা রয়েছে তারা অবশ্যই সেই লিঙ্কগুলি পরিদর্শন করবে এবং যার কাছে নেই যে তারা আবার গুগলে একটি প্রস্তুত কোড পেতে যাবে।
itতব্রত গৌতম

2
উত্তরটি আমার কাছে সোজাসুজি যথেষ্ট বলে মনে হয়েছিল: তবে আপনি যে কোড উদাহরণটি চেয়েছিলেন সেটি হল: $ পথ = রিয়েলপথ ('../../ পাবলিক_ফায়ালস /' $ ফাইলের নাম); যদি (is_writable ($ পথ)) {লিঙ্কমুক্ত ($ পথ);}
me_

102
$files = [
    './first.jpg',
    './second.jpg',
    './third.jpg'
];

foreach ($files as $file) {
    if (file_exists($file)) {
        unlink($file);
    } else {
        // File not found.
    }
}

11
file_existsফাংশনটি ব্যবহারের জন্য আপ-ভোট দিয়েছেন । অন্যথায় ফাইলটি না থাকলে আপনি একটি ত্রুটি পেতে চলেছেন।
মাহদী

17

প্রথমে আপনার অনুমতিগুলি পরীক্ষা করে দেখুন, এটি নিশ্চিত করতে যে আপনি ক) এটি আপনার স্ক্রিপ্ট থেকে দেখতে পারেন, এবং খ) এটি মুছতে সক্ষম হচ্ছেন।

আপনি যে ডিরেক্টরিটিতে বর্তমানে স্ক্রিপ্টটি চালাচ্ছেন সেগুলি থেকে গণনা করা একটি পাথও ব্যবহার করতে পারেন, যেমন:

unlink(dirname(__FILE__) . "/../../public_files/" . $filename);

(পিএইচপি 5.3 এ আমি বিশ্বাস করি আপনি এর __DIR__পরিবর্তে ধ্রুবকটি ব্যবহার করতে পারেন dirname()তবে আমি নিজে এটি এখনও ব্যবহার করি নি)


আমি অনুমতিগুলি যাচাই করেছিলাম এবং প্রথমে আমি ফাইলটি দেখতে পাচ্ছিলাম না তবে এখন সমস্ত কিছুই রিয়েলপথের জন্য ধন্যবাদ জানায়। পরামর্শের জন্য ধন্যবাদ
কেন

7

আপনি ব্যবহার করে ফাইলটি মুছতে পারেন

unlink($Your_file_path);

তবে আপনি যদি এটির HTTP পথ থেকে কোনও ফাইল মুছতে থাকেন তবে এই লিঙ্কমুক্তটি সঠিকভাবে কাজ করে না। আপনাকে একটি ফাইল পাথ সঠিক দিতে হবে।


4

এআইও সমাধান, সবকিছু পরিচালনা করে, এটি আমার কাজ নয় তবে আমি কেবল নিজেকে উন্নত করেছি। উপভোগ করুন!

/**
 * Unlink a file, which handles symlinks.
 * @see https://github.com/luyadev/luya/blob/master/core/helpers/FileHelper.php
 * @param string $filename The file path to the file to delete.
 * @return boolean Whether the file has been removed or not.
 */
function unlinkFile ( $filename ) {
    // try to force symlinks
    if ( is_link ($filename) ) {
        $sym = @readlink ($filename);
        if ( $sym ) {
            return is_writable ($filename) && @unlink ($filename);
        }
    }

    // try to use real path
    if ( realpath ($filename) && realpath ($filename) !== $filename ) {
        return is_writable ($filename) && @unlink (realpath ($filename));
    }

    // default unlink
    return is_writable ($filename) && @unlink ($filename);
}

নিখুঁত দেখাচ্ছে, অনেক ধন্যবাদ তবে দয়া করে এটি আপডেট করুন যেহেতু আপনি unlinkনিজের ফাংশনের নাম হিসাবে ব্যবহার করতে পারবেন না ।
রেহাম ফাহমি

যদি এটি কোনও শ্রেণিতে সর্বজনীন স্থিতিশীল ফাংশন হয় তবে আনলিঙ্কটি
নাদার

হ্যাঁ, তবে বর্তমানের দৃশ্যে স্ট্যান্ডেলোন আরও ভাল পছন্দ।
জুনাইদ আতারি

1

আমি জানি এই প্রশ্নটি কিছুটা পুরানো, তবে এটি এমন কিছু সাধারণ যা আমার জন্য আমার কাজ করা প্রকল্পের চিত্রগুলি মুছতে খুব ভাল কাজ করে।

unlink(dirname(__FILE__) . "/img/tasks/" . 'image.jpg');

dirname(__FILE__)বিভাগটি আপনার প্রকল্পের ভিত্তি পথ আউট ছাপে। /img/tasks/আমার বেস পথ থেকে দুই ফোল্ডার নিচে আছে। এবং অবশেষে, আমার চিত্রটি আমি মুছতে চাইছি যা আপনি যা প্রয়োজন তা তৈরি করতে পারেন।

এটির সাথে আমার সার্ভারে আমার ফাইলগুলি পেতে এবং সেগুলি মুছতে কোনও সমস্যা হয়নি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.