আমি পিএইচপি mkdir, ফাংশন সঙ্গে একটি ডিরেক্টরির তৈরি করার চেষ্টা করছি কিন্তু নিম্নরূপ আমি কোনো ত্রুটির সম্মুখীন হয়েছেন: Warning: mkdir() [function.mkdir]: Permission denied in ...। কীভাবে সমস্যার সমাধান করবেন?
আমি পিএইচপি mkdir, ফাংশন সঙ্গে একটি ডিরেক্টরির তৈরি করার চেষ্টা করছি কিন্তু নিম্নরূপ আমি কোনো ত্রুটির সম্মুখীন হয়েছেন: Warning: mkdir() [function.mkdir]: Permission denied in ...। কীভাবে সমস্যার সমাধান করবেন?
উত্তর:
আমি জানি এটি একটি পুরানো থ্রেড, তবে এর আরও ভাল উত্তর দরকার। আপনার 777 এ অনুমতি সেট করার দরকার নেই, এটি একটি সুরক্ষা সমস্যা কারণ এটি বিশ্বের পড়তে এবং লেখার অ্যাক্সেস দেয়। এটি হতে পারে যে আপনার অ্যাপাচি ব্যবহারকারীর ডিরেক্টরিতে পড়ার / লেখার অনুমতি নেই।
উবুন্টুতে আপনি যা করেন তা এখানে
নিশ্চিত হয়ে নিন যে সমস্ত ফাইল অ্যাপাচি গ্রুপ এবং ব্যবহারকারীর মালিকানাধীন। উবুন্টুতে এটি www- ডেটা গ্রুপ এবং ব্যবহারকারী
chown -R www-data:www-data /path/to/webserver/www
এরপরে www-ডেটা গ্রুপের সমস্ত সদস্যদের ফাইল পড়তে এবং লিখতে সক্ষম করে
chmod -R g+rw /path/to/webserver/www
পিএইচপি mkdir()ফাংশন এখন ত্রুটি ফিরিয়ে না নিয়ে কাজ করা উচিত
/opt/lampp/htdocs/www/my-app/public/uploadsমূলত: আমি যা করতে চাইছি তা হ'ল প্রতিটি লগইন করা ব্যবহারকারী হ'ল আপলোড ফোল্ডারের ভিতরে ফাইলগুলি আপলোড করে এবং অ্যালবাম-ফোল্ডারগুলিও তৈরি করে (এটি পিএইচপি দিয়ে করা হবে) ফটো সংরক্ষণ করার জন্য ..
ভবিষ্যতে গুগলের মাধ্যমে এটি খুঁজে পাওয়া লোকদের দেরীতে উত্তর। আমি একই সমস্যা মধ্যে দৌড়ে।
দ্রষ্টব্য: আমি ম্যাক ওএসএক্স সিংহকে আছি
যা ঘটে তা হ'ল অ্যাপাচি ব্যবহারকারী "_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/*
_wwwএবং আপনার এবং অ্যাপাচের জন্য একটি গ্রুপ তৈরি করা। একটি নতুন গ্রুপ তৈরি করুন, ডেকে বলুন trustedএবং নিজেকে এবং _wwwএতে রাখুন। তারপরে আপনার সার্ভার নথি ডিরেক্টরিতে সমস্ত ফাইলের গোষ্ঠী মালিককে বিশ্বাস করুন। অবশেষে, chmod g+rwxকেবলমাত্র অপ্যাচে অ্যাক্সেসের প্রয়োজন ফাইলগুলিতে প্রয়োজনীয় করুন, যাতে trustedগ্রুপটি ফাইল সম্পাদনা করার অনুমতি পায়।
কেবলমাত্র লিঙ্কের উত্তরগুলি স্ট্যাকওভারফ্লোতে ভাল অনুশীলন হিসাবে বিবেচনা করা হয় না, তবে এখানে যে পরামর্শ দেওয়া হয়েছে তা সাধারণত অনুসরণ করা উচিত নয়।
আমি অনুরূপ প্রশ্নের এই দুর্দান্ত উত্তরে ফিরে যেতে চাই । আমি উদ্ধৃতি:
দয়া করে 7 77 use ব্যবহার করার পরামর্শ দেওয়া বন্ধ করুন your আপনি নিজের ফাইলটি প্রত্যেকের দ্বারা লিখনযোগ্য করে তুলছেন, যার অর্থ বেশিরভাগ অর্থ আপনি অনুমতি ব্যবস্থাটির জন্য ডিজাইন করা সমস্ত সুরক্ষা হারাচ্ছেন। আপনি যদি এটির পরামর্শ দেন তবে দুর্বলভাবে কনফিগার করা ওয়েবসার্ভারে এর কী কী পরিণতি হতে পারে সে সম্পর্কে চিন্তা করুন: ফাইলগুলি ওভাররাইট করে ওয়েবসাইটটি "হ্যাক" করা অবিশ্বাস্যরকম সহজ হয়ে উঠবে। সুতরাং, না।
ডিরেক্টরি অনুমতি ত্রুটিমুক্ত আপনি যদি একটি ডিরেক্টরি তৈরি করার চেষ্টা মধ্যে ।
আমি জানি যে এই থ্রেডটি পুরানো, তবে সম্ভবত এটি একদিন কাউকে সহায়তা করবে।
পিএইচপি কেন mkdir () - এর জন্য "অনুমতি অস্বীকার" বলে - সমস্যা ইউআরএল পথ। সুতরাং, এটি সংশোধন করার জন্য, আপনার সঠিক প্রয়োজন সঠিক পথ অর্জন করা। আমি এটি এইভাবে করেছি:
<?php
$root = $_SERVER["DOCUMENT_ROOT"];
$dir = $root . '/somefolder/';
if( !file_exists($dir) ) {
mkdir($dir, 0755, true);
}
?>
ডিরেক্টরি তৈরি করতে আপনার কাছে ফাইল সিস্টেমের অনুমতি থাকা দরকার।
উদাহরণ: উবুন্টু 10.04 এ অ্যাপাচি (পিএইচপি) ব্যবহারকারী হিসাবে চালায়: গ্রুপে www-ডেটা: www-ডেটা
অর্থ ডিরেক্টরি তৈরি করতে ব্যবহারকারীর www-ডেটা অ্যাক্সেস দরকার।
Www-ডেটা ব্যবহারকারী হয়ে ওঠার জন্য: 'su www-data' ব্যবহার করে আপনি নিজে চেষ্টা করে দেখতে পারেন।
দ্রুত সমাধান হিসাবে আপনি এটি করতে পারেন: sudo chmod 777 my_pare_dir
chmod 0777বিশ্বের পড়তে এবং লেখার অ্যাক্সেস দেবে! আপনার এমন কিছু পরামর্শ দেওয়া উচিত নয়। উপরন্তু ব্যবহারকারী দলের সঙ্গে পরামর্শ বর্তমানে এখানে সবচেয়ে ভালো :)
আপনি যা করতে পারেন সেগুলি হ'ল: / etc / sudoers এ যান
নিম্নলিখিত লাইন যুক্ত করুন যা সেই ব্যবহারকারীকে www-ডেটা অনুমতি দেয় ALL = (সমস্ত: সমস্ত) সমস্ত কেন www-ডেটা? এটি হ'ল কারণ অ্যাপাচি এই ব্যবহারকারীর নাম দিয়ে চলছে।
যদি আপনার ব্যবহারকারী আলাদা হয় তবে আপনার ব্যবহারকারীর নাম ALL = (ALL: ALL) সমস্ত চেষ্টা করুন
এটি আমার পক্ষে কাজ করেছে।
sudoersসরাসরি সম্পাদনা করবেন না , তবে মূল হিসাবে লগ ইন করুন, এবং তে visudoকমান্ডটি ব্যবহার করুন : ত্রুটিযুক্ত সম্পাদনাগুলি এড়াতে কোনও পরিবর্তন পরীক্ষা করে যা sudoers ফাইল লোড করা হলে পার্স-ত্রুটি সৃষ্টি করতে পারে, যা আপনাকে শক্তিহীন ছেড়ে দিতে পারে (যেমন কোনও অধিকার হিসাবে নেই) যে কোনও কিছু পরিবর্তন করুন)
যেহেতু আপনি একটি ম্যাকে রয়েছেন, আপনি নিজের ম্যাকের _www (অ্যাপাচি ব্যবহারকারী গ্রুপ) গ্রুপে নিজেকে যুক্ত করতে পারেন:
sudo dseditgroup -o edit -a $USER -t user _www
এবং _www ব্যবহারকারীকে হুইল গ্রুপে যুক্ত করুন যা ম্যাক ফাইলগুলি তৈরি করে বলে মনে হয়:
sudo dseditgroup -o edit -a _www -t user wheel
আমার এখনই এই সমস্যাটি রয়েছে, এখনই আমি আপনাকে দিতে পারি আমার সেরা সমাধান (আপনি নিজের কোডের কোনওটি অন্তর্ভুক্ত করেননি) তা হ'ল:
আপনি যদি সাব-ফোল্ডারগুলি তৈরি করতে পুনরাবৃত্ত কমান্ডটি ব্যবহার করে থাকেন তবে mkdir কমান্ডে 0755 (শুরুতে 0 টি অন্তর্ভুক্ত মনে রাখবেন) লিখতে ভুলবেন না যেমন:
if(!file_exists($output)){
if (!mkdir($output, 0755, true)) {//0755
die('Failed to create folders...');
}
}
এটি এখনই আমার জন্য কাজ করা হয়।
আপনি যদি লিনাক্স ব্যবহার করে থাকেন তবে প্রথমে অ্যাপাচের ব্যবহারকারীর চেক করুন, যেহেতু কিছু ডিস্ট্রোজে এটি আলাদা হতে পারে:
egrep -i '^user|^group' /etc/httpd/conf/httpd.conf
ধরা যাক ফলাফলটি "http"। ফলোউইউংটি করুন, কেবল ফোল্ডারের পথে_পথ_পৃষ্ঠা ফোল্ডারটি মনে রাখবেন:
chown -R http:http path_to_folder
chmod -R g+rw path_to_folder
উমাস্কের সাথে এটি কোনও সমস্যা নয় কিনা তা পরীক্ষা করে দেখুন
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);
}
}
}
}
আপনি ftp সার্ভারটি ইনস্টল করার পরে আপনাকে sudo apt-get install vsftpdএটি কনফিগার করতে হবে। লেখার অ্যাক্সেস সক্ষম করতে আপনাকে /etc/vsftpd.confফাইলটি সম্পাদনা করতে হবে এবং অসম্পূর্ণ করতে হবে
#write_enable=YES
লাইন, তাই এটি পড়া উচিত
write_enable=YES
ফাইল এবং পুনরায় আরম্ভ করুন সংরক্ষণ করুন vsftpdসঙ্গে sudo service vsftpd restart।
অন্যান্য কনফিগারেশন বিকল্পের জন্য এই ডকুমেন্টেশন বাman vsftpd.conf
আপনি যদি ভুল পথ ব্যবহার করে থাকেন তবে এই ত্রুটি ঘটে।
যেমন:
আমি উবুন্টু সিস্টেম ব্যবহার করছি এবং আমার প্রকল্প ফোল্ডারের নাম 'মাইপ্রজেক্ট'
মনে করুন আমার কাছে মাইপ্রজেক্ট / পাবলিক / রিপোর্ট ডিরেক্টরি রয়েছে এবং অর্ডার নামে একটি নতুন ফোল্ডার তৈরি করতে চাই
তারপরে আমার পুরো পথটি দরকার যেখানে আমার প্রকল্পটি বিদ্যমান। আপনি পিডব্লিউডি কমান্ড দ্বারা পাথ পেতে পারেন
সুতরাং আমার মূল পাথ = '/ হোম / এইচটিডোকস / মাইপ্রজেক্ট /' হবে
ir দির = '/ হোম / এইচটিডোকস / মাইপ্রজেক্ট / পাবলিক / রিপোর্ট / অর্ডার';
if (!is_dir($dir)) {
mkdir($dir, 0775, true);
}
এটি আপনার পক্ষে কাজ করবে !! উপভোগ করুন !!