পিএইচপি এমকেডির: অনুমতি সমস্যা অস্বীকার করেছে


100

আমি পিএইচপি mkdir, ফাংশন সঙ্গে একটি ডিরেক্টরির তৈরি করার চেষ্টা করছি কিন্তু নিম্নরূপ আমি কোনো ত্রুটির সম্মুখীন হয়েছেন: Warning: mkdir() [function.mkdir]: Permission denied in ...। কীভাবে সমস্যার সমাধান করবেন?


4
প্ল্যাটফর্ম / ওয়েব সার্ভার / অপারেটিং সিস্টেম?
সালমান এ

4
এই প্রশ্নটি পরীক্ষা করে দেখুন: http://stackoverflow.com/questions/13908722/php-unable-to-create-a-directory-with-mkdir আমার একই সমস্যা ছিল এবং এখানে উত্তরটি আমার সমস্যাটি ঠিক করেছে। আপনি যদি লিনাক্সে চালাচ্ছেন, সেলইনাক্স সম্পর্কে উত্তরটি আপনার জন্য প্রয়োগ হতে পারে।
লুকাস মাদুরেইর

এই এটা আমার জন্য কাজ করছে চেষ্টা stackoverflow.com/a/12656964/7516620 লিংক বিবরণ এখানে লিখুন
অক্ষয় Italiya

উত্তর:


174

আমি জানি এটি একটি পুরানো থ্রেড, তবে এর আরও ভাল উত্তর দরকার। আপনার 777 এ অনুমতি সেট করার দরকার নেই, এটি একটি সুরক্ষা সমস্যা কারণ এটি বিশ্বের পড়তে এবং লেখার অ্যাক্সেস দেয়। এটি হতে পারে যে আপনার অ্যাপাচি ব্যবহারকারীর ডিরেক্টরিতে পড়ার / লেখার অনুমতি নেই।

উবুন্টুতে আপনি যা করেন তা এখানে

  1. নিশ্চিত হয়ে নিন যে সমস্ত ফাইল অ্যাপাচি গ্রুপ এবং ব্যবহারকারীর মালিকানাধীন। উবুন্টুতে এটি www- ডেটা গ্রুপ এবং ব্যবহারকারী

    chown -R www-data:www-data /path/to/webserver/www

  2. এরপরে www-ডেটা গ্রুপের সমস্ত সদস্যদের ফাইল পড়তে এবং লিখতে সক্ষম করে

    chmod -R g+rw /path/to/webserver/www

পিএইচপি mkdir()ফাংশন এখন ত্রুটি ফিরিয়ে না নিয়ে কাজ করা উচিত


4
ভাল উত্তর! আশা করি সময়ের সাথে সাথে এটি পৃষ্ঠার শীর্ষে পৌঁছে যাবে!
উচ্চ অনিয়মিত


ক্যাশে এবং লগগুলির মতো জিনিসগুলি লেখার জন্য অ্যাপাচি-র অনুমতি দরকার নেই ... এটি ঠিক সুরের বিষয় ing
মানাটেক্স

@ সিম্পলিংগেইন হাই আমি আপনার উত্তরটি লক্ষ্য করেছি .. আমি এমন একটি প্রকল্পের সাথে একই সমস্যার মুখোমুখি হয়েছি যা আমি কোডআইগনটারে তৈরি করার চেষ্টা করছি এবং উবুন্টুতে 14.14 লেটিস বিকাশ করতে চাই .. আপনি কি দয়া করে আমাকে আরও প্রয়োজনীয় পদক্ষেপগুলি ব্যাখ্যা করতে পারেন? এই ত্রুটি ঠিক করার জন্য কি ??? আপনাকে কিছু অতিরিক্ত তথ্য দেওয়ার জন্য: পরম পথটি হ'ল /opt/lampp/htdocs/www/my-app/public/uploadsমূলত: আমি যা করতে চাইছি তা হ'ল প্রতিটি লগইন করা ব্যবহারকারী হ'ল আপলোড ফোল্ডারের ভিতরে ফাইলগুলি আপলোড করে এবং অ্যালবাম-ফোল্ডারগুলিও তৈরি করে (এটি পিএইচপি দিয়ে করা হবে) ফটো সংরক্ষণ করার জন্য ..
এলটিদেব

7
আমি এমন ব্যবহারকারীদের পছন্দ করি না যাঁরা এটির সুরক্ষিত উপায় না দেখিয়ে "এটি সুরক্ষিত" বলে চলেছেন।
সিড্রিক ইপকিস

38

ভবিষ্যতে গুগলের মাধ্যমে এটি খুঁজে পাওয়া লোকদের দেরীতে উত্তর। আমি একই সমস্যা মধ্যে দৌড়ে।

দ্রষ্টব্য: আমি ম্যাক ওএসএক্স সিংহকে আছি

যা ঘটে তা হ'ল অ্যাপাচি ব্যবহারকারী "_www" হিসাবে চালিত হচ্ছে এবং কোনও ফাইল সম্পাদনা করার অনুমতি নেই। আপনি পিএইচপি করার মাধ্যমে কোনও ফাইল সিস্টেমের কাজগুলি লক্ষ্য করবেন।

কিভাবে ঠিক করবো:

ফাইন্ডার উইন্ডোটি খুলুন এবং মেনু বার থেকে, Go> ফোল্ডারে যান> / বেসরকারী / ইত্যাদি / অ্যাপাচি 2 নির্বাচন করুন

এখন httpd.conf খুলুন

অনুসন্ধান:

User _www 
Group _www

ব্যবহারকারীর নাম পরিবর্তন করুন:

User <YOUR LOGIN USERNAME>

এই ফর্ম টার্মিনালটি চালিয়ে এখন অ্যাপাচি পুনরায় চালু করুন:

sudo apachectl -k restart

যদি এটি এখনও কাজ না করে তবে উপরেরটি করার আগে আমি নিম্নলিখিতটি করার চেষ্টা করব। সম্পর্কিত হতে পারে।

টার্মিনালটি খুলুন এবং নিম্নলিখিত কমান্ডগুলি চালনা করুন: (দ্রষ্টব্য, আমার ওয়েবসারভার ফাইলগুলি / লাইব্রেরি / ওয়েবসার্ভার / www এ অবস্থিত your আপনার ওয়েবসাইটের অবস্থান অনুযায়ী পরিবর্তন করুন)

sudo chmod 775 /Library/WebServer/www
sudo chmod 775 /Library/WebServer/www/*

6
এই সমাধানটি কাজ করে, তবে কেউ যদি এটির মাধ্যমে দূষিত কোড কার্যকর করতে পারে (যেমন শেলশক শোষণের মাধ্যমে) আপনার সিস্টেমের সাথে অ্যাপাচাকে সর্বনাশ করতে দেয়। একটি বিকল্প হ'ল অ্যাপাচি হিসাবে চালানো ছেড়ে দেওয়া _wwwএবং আপনার এবং অ্যাপাচের জন্য একটি গ্রুপ তৈরি করা। একটি নতুন গ্রুপ তৈরি করুন, ডেকে বলুন trustedএবং নিজেকে এবং _wwwএতে রাখুন। তারপরে আপনার সার্ভার নথি ডিরেক্টরিতে সমস্ত ফাইলের গোষ্ঠী মালিককে বিশ্বাস করুন। অবশেষে, chmod g+rwxকেবলমাত্র অপ্যাচে অ্যাক্সেসের প্রয়োজন ফাইলগুলিতে প্রয়োজনীয় করুন, যাতে trustedগ্রুপটি ফাইল সম্পাদনা করার অনুমতি পায়।
ক্রিস মিডলটন 21

4
এই জবাবটি একটি খারাপ ধারণা এটির উপর পুনরায় জোর দেওয়ার জন্য কেবল চিমিং। অনেকগুলি খুব ভাল কারণ রয়েছে যে অ্যাপাচি প্রক্রিয়াগুলি তাদের নিজস্ব বিশেষ-উদ্দেশ্যে ব্যবহারকারীর মালিকানাধীন।
ড্যানায়মাচাইন

16

পিএইচপি-তে এমকেডির ব্যবহার করার সময় 777 এ অনুমতি নির্ধারণ করবেন না

কেবলমাত্র লিঙ্কের উত্তরগুলি স্ট্যাকওভারফ্লোতে ভাল অনুশীলন হিসাবে বিবেচনা করা হয় না, তবে এখানে যে পরামর্শ দেওয়া হয়েছে তা সাধারণত অনুসরণ করা উচিত নয়।

আমি অনুরূপ প্রশ্নের এই দুর্দান্ত উত্তরে ফিরে যেতে চাই । আমি উদ্ধৃতি:

দয়া করে 7 77 use ব্যবহার করার পরামর্শ দেওয়া বন্ধ করুন your আপনি নিজের ফাইলটি প্রত্যেকের দ্বারা লিখনযোগ্য করে তুলছেন, যার অর্থ বেশিরভাগ অর্থ আপনি অনুমতি ব্যবস্থাটির জন্য ডিজাইন করা সমস্ত সুরক্ষা হারাচ্ছেন। আপনি যদি এটির পরামর্শ দেন তবে দুর্বলভাবে কনফিগার করা ওয়েবসার্ভারে এর কী কী পরিণতি হতে পারে সে সম্পর্কে চিন্তা করুন: ফাইলগুলি ওভাররাইট করে ওয়েবসাইটটি "হ্যাক" করা অবিশ্বাস্যরকম সহজ হয়ে উঠবে। সুতরাং, না।


9

ডিরেক্টরি অনুমতি ত্রুটিমুক্ত আপনি যদি একটি ডিরেক্টরি তৈরি করার চেষ্টা মধ্যে


আমি কেবল ফাইলজিলা ব্যবহার করে ফাইলের অনুমতিগুলি পুনরাবৃত্তভাবে 755 এ পরিবর্তিত করে মূল প্রশ্নের সমস্যার সমাধান করেছি z প্যারেন্ট ফোল্ডারে ডান ক্লিক করুন, ধরে নিলে এটি এক ধরণের সাধারণ ফাইল সংগ্রহস্থল ফোল্ডার যা 755 এর জন্য অনুমতি সেট করা ঠিক আছে, তারপরে ফাইল বৈশিষ্ট্য -> সংখ্যাগত মান -> 755, তারপরে "সাব ডিরেক্টরিগুলিতে পুনরাবৃত্তি" পরীক্ষা করুন। আপনার কাছে প্রচুর ফাইল থাকলে সাব ডিরেক্টরিগুলির মাধ্যমে প্রচার করতে কয়েক মিনিট সময় নেয়। তারপরে আবার চেষ্টা করুন।
তারকাস

7

আমি জানি যে এই থ্রেডটি পুরানো, তবে সম্ভবত এটি একদিন কাউকে সহায়তা করবে।

পিএইচপি কেন mkdir () - এর জন্য "অনুমতি অস্বীকার" বলে - সমস্যা ইউআরএল পথ। সুতরাং, এটি সংশোধন করার জন্য, আপনার সঠিক প্রয়োজন সঠিক পথ অর্জন করা। আমি এটি এইভাবে করেছি:

<?php

$root = $_SERVER["DOCUMENT_ROOT"];
$dir = $root . '/somefolder/';

if( !file_exists($dir) ) {
    mkdir($dir, 0755, true);
}

?>

4
আমার সাথে নতুন হোস্টে স্থানান্তরিত হওয়ার সময় ঘটেছিল (এতে মাইএসকিএলএনডি এলওএল আছে)। আমি নতুন পূর্ণ হোম ডিরেক্টরি পথের মধ্যে পরিবর্তন করতে ভুলে গেছি। দেখা যাচ্ছে এটি আসলে কোনও অনুমতি সমস্যা ছিল না।
জেএসজি 20'19

2

ডিরেক্টরি তৈরি করতে আপনার কাছে ফাইল সিস্টেমের অনুমতি থাকা দরকার।

উদাহরণ: উবুন্টু 10.04 এ অ্যাপাচি (পিএইচপি) ব্যবহারকারী হিসাবে চালায়: গ্রুপে www-ডেটা: www-ডেটা

অর্থ ডিরেক্টরি তৈরি করতে ব্যবহারকারীর www-ডেটা অ্যাক্সেস দরকার।

Www-ডেটা ব্যবহারকারী হয়ে ওঠার জন্য: 'su www-data' ব্যবহার করে আপনি নিজে চেষ্টা করে দেখতে পারেন।

দ্রুত সমাধান হিসাবে আপনি এটি করতে পারেন: sudo chmod 777 my_pare_dir


14
chmod 0777বিশ্বের পড়তে এবং লেখার অ্যাক্সেস দেবে! আপনার এমন কিছু পরামর্শ দেওয়া উচিত নয়। উপরন্তু ব্যবহারকারী দলের সঙ্গে পরামর্শ বর্তমানে এখানে সবচেয়ে ভালো :)
KingCrunch

4
যদি ওএসে বিশ্বের অ্যাক্সেস থাকে তবে নিশ্চিত হন। আরও ভাল উপায়টি হ'ল: sudo chown www-data: www-data my_parent_dir
জন স্কারপেটেগ

অথবা অনুমতিগুলি একা ছেড়ে মাতৃ ডিরেক্টরি ডিরেক্টরিতে www-ডেটা যুক্ত করুন।
মার্ক বি

0

আপনি যা করতে পারেন সেগুলি হ'ল: / etc / sudoers এ যান

নিম্নলিখিত লাইন যুক্ত করুন যা সেই ব্যবহারকারীকে www-ডেটা অনুমতি দেয় ALL = (সমস্ত: সমস্ত) সমস্ত কেন www-ডেটা? এটি হ'ল কারণ অ্যাপাচি এই ব্যবহারকারীর নাম দিয়ে চলছে।

যদি আপনার ব্যবহারকারী আলাদা হয় তবে আপনার ব্যবহারকারীর নাম ALL = (ALL: ALL) সমস্ত চেষ্টা করুন

এটি আমার পক্ষে কাজ করেছে।


5
sudoersসরাসরি সম্পাদনা করবেন না , তবে মূল হিসাবে লগ ইন করুন, এবং তে visudoকমান্ডটি ব্যবহার করুন : ত্রুটিযুক্ত সম্পাদনাগুলি এড়াতে কোনও পরিবর্তন পরীক্ষা করে যা sudoers ফাইল লোড করা হলে পার্স-ত্রুটি সৃষ্টি করতে পারে, যা আপনাকে শক্তিহীন ছেড়ে দিতে পারে (যেমন কোনও অধিকার হিসাবে নেই) যে কোনও কিছু পরিবর্তন করুন)
ইলিয়াস ভ্যান ওটেজেম

ব্যবহারকারীর নামটি কীভাবে সন্ধান করবেন। www-data এর মত? আমি
এনগিনেক্স

4
@ রৌপসিন এটি চেষ্টা করুন: পিএস অক্স | egrep '(nginx)'
ম্যাক্সওয়েলস

0

যেহেতু আপনি একটি ম্যাকে রয়েছেন, আপনি নিজের ম্যাকের _www (অ্যাপাচি ব্যবহারকারী গ্রুপ) গ্রুপে নিজেকে যুক্ত করতে পারেন:

sudo dseditgroup -o edit -a $USER -t user _www

এবং _www ব্যবহারকারীকে হুইল গ্রুপে যুক্ত করুন যা ম্যাক ফাইলগুলি তৈরি করে বলে মনে হয়:

sudo dseditgroup -o edit -a _www -t user wheel

0

আমার এখনই এই সমস্যাটি রয়েছে, এখনই আমি আপনাকে দিতে পারি আমার সেরা সমাধান (আপনি নিজের কোডের কোনওটি অন্তর্ভুক্ত করেননি) তা হ'ল:

  1. আপনি কীভাবে আপনার গন্তব্য ফোল্ডারটির নাম রাখেন তা পরীক্ষা করুন, যেমন: নতুন_ফোল্ডার (অনেক সময় হোস্টগুলি আন্ডারস্কোর, ড্যাশ ইত্যাদির সাহায্যে রান করার সময় নাম তৈরি করার অনুমতি দেয় না বলে অনুমতি দেওয়ার ক্ষেত্রে এটি ত্রুটি সৃষ্টি করতে পারে)। এটা আমার জন্য কাজ করেছে।
  2. আপনি যদি সাব-ফোল্ডারগুলি তৈরি করতে পুনরাবৃত্ত কমান্ডটি ব্যবহার করে থাকেন তবে mkdir কমান্ডে 0755 (শুরুতে 0 টি অন্তর্ভুক্ত মনে রাখবেন) লিখতে ভুলবেন না যেমন:

    if(!file_exists($output)){
        if (!mkdir($output, 0755, true)) {//0755
            die('Failed to create folders...');
        }
    
    }
    

এটি এখনই আমার জন্য কাজ করা হয়।


4
777 একটি সুরক্ষা সমস্যা
মাইকোলবেন

ঠিক এখনই 0755
অরুনগিসিয়াদি

0

আপনি যদি লিনাক্স ব্যবহার করে থাকেন তবে প্রথমে অ্যাপাচের ব্যবহারকারীর চেক করুন, যেহেতু কিছু ডিস্ট্রোজে এটি আলাদা হতে পারে:

egrep -i '^user|^group' /etc/httpd/conf/httpd.conf 

ধরা যাক ফলাফলটি "http"। ফলোউইউংটি করুন, কেবল ফোল্ডারের পথে_পথ_পৃষ্ঠা ফোল্ডারটি মনে রাখবেন:

chown -R http:http path_to_folder
chmod -R g+rw path_to_folder

0

উমাস্কের সাথে এটি কোনও সমস্যা নয় কিনা তা পরীক্ষা করে দেখুন

if (!function_exists('mkdir_r')) {
    /**
     * create directory recursively
     * @param $dirName
     * @param int $rights
     * @param string $dir_separator
     * @return bool
     */
    function mkdir_r($dirName, $rights = 0744, $dir_separator = DIRECTORY_SEPARATOR) {
        $dirs = explode($dir_separator, $dirName);
        $dir = '';
        $created = false;
        foreach ($dirs as $part) {
            $dir .= $part . $dir_separator;
            if (!is_dir($dir) && strlen($dir) > 0) {
                $created = mkdir($dir, $rights);
            }
        }
        return $created;
    }
}

if (!function_exists('ensure_dir')) {
    /**
     * ensure directory exist if not create 
     * @param $dir_path
     * @param int $mode
     * @param bool $use_mask
     * @param int $mask
     * @return bool
     */
    function ensure_dir($dir_path, $mode = 0744, $use_mask = true, $mask = 0002) {
        // set mask 
        $old_mask = $use_mask && $mask != null
            ? umask($mask)
            : null;
        try {
            return is_dir($dir_path) || mkdir_r($dir_path, $mode);
        } finally {
            if ($use_mask && $old_mask != null) {
                // restore original
                umask($old_mask);
            }
        }
    }
}

0

আপনি ftp সার্ভারটি ইনস্টল করার পরে আপনাকে sudo apt-get install vsftpdএটি কনফিগার করতে হবে। লেখার অ্যাক্সেস সক্ষম করতে আপনাকে /etc/vsftpd.confফাইলটি সম্পাদনা করতে হবে এবং অসম্পূর্ণ করতে হবে

#write_enable=YES

লাইন, তাই এটি পড়া উচিত

write_enable=YES

ফাইল এবং পুনরায় আরম্ভ করুন সংরক্ষণ করুন vsftpdসঙ্গে sudo service vsftpd restart

অন্যান্য কনফিগারেশন বিকল্পের জন্য এই ডকুমেন্টেশন বাman vsftpd.conf


0

আপনি যদি ভুল পথ ব্যবহার করে থাকেন তবে এই ত্রুটি ঘটে।

যেমন:

আমি উবুন্টু সিস্টেম ব্যবহার করছি এবং আমার প্রকল্প ফোল্ডারের নাম 'মাইপ্রজেক্ট'

মনে করুন আমার কাছে মাইপ্রজেক্ট / পাবলিক / রিপোর্ট ডিরেক্টরি রয়েছে এবং অর্ডার নামে একটি নতুন ফোল্ডার তৈরি করতে চাই

তারপরে আমার পুরো পথটি দরকার যেখানে আমার প্রকল্পটি বিদ্যমান। আপনি পিডব্লিউডি কমান্ড দ্বারা পাথ পেতে পারেন

সুতরাং আমার মূল পাথ = '/ হোম / এইচটিডোকস / মাইপ্রজেক্ট /' হবে

ir দির = '/ হোম / এইচটিডোকস / মাইপ্রজেক্ট / পাবলিক / রিপোর্ট / অর্ডার';

if (!is_dir($dir)) {
   mkdir($dir, 0775, true);
}

এটি আপনার পক্ষে কাজ করবে !! উপভোগ করুন !!

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