মুভি_আপলোডড ফাইলটি "স্ট্রিমটি খুলতে ব্যর্থ হয়েছে: অনুমতি অস্বীকার করা হয়েছে" ত্রুটি দেয়


143

সেন্টোজে অ্যাপাচি ২.২ এবং পিএইচপি 5.3 দিয়ে আপলোড ডিরেক্টরিটি কনফিগার করার চেষ্টা করার সময় আমি এই ত্রুটিটি পেয়ে যাচ্ছি।

Php.ini এ:

upload_tmp_dir = /var/www/html/mysite/tmp_file_upload/

Httpd.conf এ:

Directory /var/www/html/mysite/tmp_file_upload/>
    Options  -Indexes
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>
<Directory /var/www/html/mysite/images/>
                Options -Indexes
</Directory>

CentOS ডিরেক্টরি অনুমতি:

drwxrwxr-x 2 root root 4096 Nov 11 10:01 images
drwxr-xr-x 2 root root 4096 Nov 12 04:54 tmp_file_upload

আমি যাই করি না কেন, আমি ফাইল আপলোড করার সময় পিএইচপি থেকে এই ত্রুটিটি পেতে থাকি:

সতর্কতা: মুভি_আপলোডড ফাইল (চিত্রগুলি / রোবট.জেপিজি): স্ট্রিমটি খুলতে ব্যর্থ হয়েছে: /var/www/html/mysite/process.php 78 78 লাইনে অনুমতি অস্বীকার করা হয়েছে

সতর্কতা: মুভি_আপলোডড ফাইল (): 78 78 লাইনে '/ tmp / phpsKD2Qm' কে 'চিত্র / রোবট.জেপিজি' তে স্থানান্তর করতে অক্ষম 78

আপনি দেখতে পাচ্ছেন, এটি আপলোড ফাইল সম্পর্কিত php.ini ফাইল থেকে কনফিগারেশনটি নেয় নি।

আমি এখানে কি ভুল করছি?


775? হয়তো আপনার সার্ভার কারও মতো চলছে না। একমাত্র রুট এই ক্ষেত্রে লিখতে পারেন (আপনার "চিত্রগুলি" অনুমতিগুলি) ...
কনরাড বোরোস্কি

এর মানে কি ? আমি কীভাবে এটি পরিবর্তন করতে পারি?
ব্যবহারকারীর 63898

মনে রাখবেন যে সমস্ত পিতামহক ডিরেক্টরিতেও সঠিক অনুমতি থাকা দরকার।
শ্রীধর সারনোবাত

উত্তর:


187

এটি কারণ imagesএবং tmp_file_uploadএটি কেবল rootব্যবহারকারী দ্বারা লিখিত হয় are আপলোড কাজের জন্য আমাদের সেই ফোল্ডারগুলির মালিককে httpd প্রক্রিয়ার মালিক হিসাবে তৈরি করতে হবে বা তাদের বিশ্বব্যাপী লিখনযোগ্য (খারাপ অনুশীলন) করা দরকার make

  1. Apache প্রক্রিয়া মালিক চেক করুন: $ps aux | grep httpd। প্রথম কলামটি সাধারণত মালিকই হবেnobody
  2. এর মালিকানা পরিবর্তন imagesএবং tmp_file_uploadপরিণত করা nobodyবা যাই হোক না কেন মালিক আপনাকে ধাপ 1 খুঁজে পাওয়া যায়নি।

    $sudo chown nobody /var/www/html/mysite/images/
    
    $sudo chown nobody /var/www/html/mysite/tmp_file_upload/
  3. Chmod imagesএবং tmp_file_uploadএখন মালিকের দ্বারা লিখিতযোগ্য , যদি প্রয়োজন হয় [মনে হয় আপনার ইতিমধ্যে এটি স্থানে রয়েছে]। @ দিমিত্রি টেপলাইকভ উত্তরে উল্লেখ করা হয়েছে।

    $ sudo chmod -R 0755 /var/www/html/mysite/images/
    
    $ sudo chmod -R 0755 /var/www/html/mysite/tmp_file_upload/
  4. কেন এই আচরণটি সুখী হয় তার আরও তথ্যের জন্য, http://php.net/manual/en/ini.core.php#ini.upload-tmp-dir ম্যানুয়ালটি পরীক্ষা করে দেখুন , লক্ষ্য করুন যে এটি open_basedirনির্দেশের বিষয়েও কথা বলছে ।


4
ধন্যবাদ: আমাদের প্রবীণ মালিকটি ডেমন ছিল এটি এখন
আপাচে

এই ফিক্সটি এমন পরিস্থিতিতে প্রযোজ্য যেখানে আপনি সম্ভবত সার্ভারের পিএইচপি টাইপটি দ্রুত_সিজিআই, সিজিআই থেকে অ্যাপাচি_মডকে প্লেস্ক ইত্যাদি হিসাবে পরিবর্তন করেছেন .. এটি আমার সমস্যাগুলি স্থির করেছে।
এলিওট্রোক

1
আমার এই একই ত্রুটি হচ্ছে তবে প্রক্রিয়া এবং ফোল্ডার উভয়েরই মালিকানা রয়েছে jacob(এটি আমার স্থানীয় মেশিন হিসাবে আমার) এবং ফোল্ডারগুলির সমস্তই 755বা আছে 775
চুনোমণ্ডকোটোন

sudo service httpd restartঅনুমতি পরিবর্তন করার পরে আমাকে আমার অ্যাপাচি প্রক্রিয়া পুনরায় চালু করতে হবে । তারপরে এটি কাজ করেছিল :) মালিক পরিবর্তন করার পরিবর্তে chownআমি আমার অ্যাপাচি প্রক্রিয়াটি একটি 'www' গ্রুপে যুক্ত করেছি এবং এই ডিরেক্টরিগুলিকে একই 'www' গ্রুপে যুক্ত করেছিchgrp
আলী

76

অ্যাপাচি প্রক্রিয়া মালিকের সন্ধানের জন্য আপনি এই স্ক্রিপ্টটি চালাতে পারেন:

<?php echo exec('whoami'); ?>

এবং তারপরে আপনি যা পেয়েছেন তাতে গন্তব্য ডিরেক্টরিটির মালিককে পরিবর্তন করুন। কমান্ডটি ব্যবহার করুন:

chown user destination_dir

এবং তারপরে কমান্ডটি ব্যবহার করুন

chmod 755 destination_dir

গন্তব্য ডিরেক্টরি অনুমতি পরিবর্তন করতে।


3
ধন্যবাদ এটি আমার জন্য কাজ করে। আমি প্রথমে লাইথ শেদীদের পদ্ধতিটি ব্যবহার করেছি তবে পিএস অক্স | টাইপ করার সময় আমি একই ফল পাই না গ্রেপ httpd এবং <?php echo exec('whoami'); ?>। কোন এক কেন জানেন না ?
কুকিনসুল

1
পিএস অক্স | গ্রেপ https ওয়েব সার্ভারের মালিকের নাম ফেরত দেয় না। এটি করে: পিএস অক্স | গ্রেপ-ই '[এ] পাচে | [এইচ] টিটিপিডি | [_] www | [ডাব্লু] ডাব্লুডাব্লু-ডেটা | [এন] জিন্স' | grep -v মূল | মাথা -1 | কাট-ডি \ -f1 ফ্রন সিমফনি ডক
ডেভিড জ্যাকুয়েল

1
উল্লেখ্য যে উপরের কমান্ডটিতে "-d \" এবং "-f1" এর মধ্যে দুটি ফাঁকা স্থান থাকা উচিত। আপনি যেমনটি অনুলিপি-পেস্ট করেন তবে আপনি "কাটা: খারাপ ডিলিমিটার" এর মতো একটি ত্রুটি পেতে পারেন।
বিজেজর

1
প্লাস 1 এর জন্য exec('whoami')। আমাকে আরও 30 মিনিট বাঁচিয়েছে। উবুন্টু ব্যবহারকারীকে ছেঁকেছিল
দেওয়াল

11
এই হওয়া উচিত www-data? সাধারণত
ম্যাক্সিম্মে

18

আপনার যদি ম্যাক ওএস এক্স থাকে তবে ফাইল রুট বা আপনার ওয়েবসাইটের ফোল্ডারে যান।

তারপরে ডানদিকে ক্লিক করুন, তথ্য পেতে যান, খুব নীচে যান ( ভাগ করে নেওয়া ও অনুমতি ), এটি খুলুন, কেবলমাত্র পড়তে এবং লিখতে সমস্ত পঠনযোগ্য পরিবর্তন করুন। প্যাডলকটি খোলার বিষয়টি নিশ্চিত করুন, সেটিং আইকনে যান এবং সংযুক্ত আইটেমগুলিতে প্রয়োগ করুন ...


আপনি যখন ম্যাক ওএস সম্পর্কে মন্তব্য করছেন যখন তার প্রশ্নটি লিনাক্স সিস্টেম সম্পর্কে?
Kmeixner

7
হাই হওকার, আপনার উত্তরের জন্য ধন্যবাদ। আমি ম্যাক এ আছি এবং আপনার উত্তর আমার সমস্যা সমাধান করেছে। অনেক ধন্যবাদ.
সঞ্জয় শর্মা

2
এই উত্তরটি পছন্দ করুন
আলেক্সি শ।

2
লিনাক্স সম্পর্কে এই প্রশ্নটি কিমিক্সনারের কিন্তু আমার ওএসএক্সে আমার ঠিক একই সমস্যা ছিল। আমি /private/var/tmpআমার ম্যাকের ফোল্ডারে লেখার বিকল্পগুলি পরিবর্তন করার পরে এই মন্তব্যের জন্য ধন্যবাদ আমার পক্ষে কাজ করেছে ।
সালাম

এটি একটি পুরানো পোস্ট, তবে আমার ঠিক এটি করা দরকার। ধন্যবাদ
TheRobQ

14

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

sudo adduser <username> www-data
sudo chown -R www-data:www-data /var/www
sudo chmod -R g+rwX /var/www

তারপরে লগআউট বা পুনরায় বুট করুন।

যদি SELinuxঅভিযোগ হয় তবে নীচের চেষ্টা করুন

sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www(/.*)?'
sudo restorecon -Rv '/var/www(/.*)?'

আমার জীবন বাঁচিয়ে রেখেছে :) .. আমি আমার ওয়েব মোতায়েন করতে জিআইটি পোস্ট-রিসিভ হুক ব্যবহার করি, এবং যতবার আমি
নিযুক্ত

এটি সেরা উত্তর।
saviour123

12

আমি এটি পূর্ববর্তী পরামর্শগুলিতে যুক্ত করতে চেয়েছিলাম। আপনি যদি লিনাক্সের এমন কোনও সংস্করণ ব্যবহার করছেন যা সেলইনাক্স সক্ষম করেছে তবে আপনার এটিও একটি শেলের মধ্যে কার্যকর করা উচিত:

chcon -R --type httpd_sys_rw_content_t /path/to/your/directory

আপনার ওয়েব সার্ভার ব্যবহারকারীর অনুমতি দেওয়ার সাথে সাথে গ্রুপের মাধ্যমে বা ডিরেক্টরিটির মালিককে পরিবর্তন করার মাধ্যমে।


restorecon -R -v /path/to/your/directoryসম্ভবত পরে এই অন্তর্ভুক্ত করা প্রয়োজন। access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/...
AbsoluteƵERØ

খুব সম্ভবত সত্য হতে পারে তবে আমি এই ধারণার অধীনে ছিলাম যে চকন "পরিবর্তিত প্রসঙ্গ" অর্থাৎ এটি সবেমাত্র পরিবর্তিত হয়েছিল। আপনি যা দেখছেন সেটি প্রথমে "সেমেনেজ এফকন্টেক্সট" ব্যবহার করে যা এটিকে কিছু সেটিংস ফাইল "file_contexts.local" এ রাখে, তবে এটি কখনও প্রসঙ্গে পরিবর্তন করে না।
ক্রিস

@ ক্রিস, ধন্যবাদ মানুষ। এটি আমার সমস্যার সমাধান করেছে। আপনি কি দয়া করে এই বিষয়ে কিছু আলোকপাত করবেন? এই আদেশটি আসলে কী করে? আমি ম্যান পৃষ্ঠাগুলি এবং এমনকি চকন সম্পর্কিত তথ্যও পেয়েছিলাম এবং আপনি যে ধরণের প্রবেশ করিয়েছেন তার মান খুঁজে পাই না। আমি এখানে কিছুটা বিভ্রান্ত।
জোকার

এটি ওয়েব সার্ভার (httpd) দ্বারা ডিরেক্টরি বা ফাইলগুলি পঠনযোগ্য করে তোলে ... আমি সত্যই সিলিনাক্সটি ব্যাখ্যা করতে চাই না এবং সম্ভবত এটিতে আমার নিজের মধ্যে একটি ধারণা রয়েছে ... অনুগ্রহ করে দেখুন nsa.gov/ কি-we-do / গবেষণা / সেলিনাক্স
ক্রিস

11

এই ফোল্ডারটির জন্য অনুমতিগুলি পরিবর্তন করুন

# chmod -R 0755 /var/www/html/mysite/images/


1
এটি কি এখন এর মতো করেছে: drwxrwxr-x 2 root root 4096 নভেম্বর 11 10:01 চিত্রগুলি এতেও রয়েছে: drwxrwxr-x 2 রুট রুট 4096 নভেম্বর 12 04:54 tmp_file_upload তবে এখনও একই ত্রুটি
ইউজার 63898

7

এটা চেষ্টা কর:

  1. ওপেন / ইত্যাদি / অ্যাপাচি 2 / এনভায়ার্স

    sudo gedit /etc/apache2/envvars
  2. www-dataআপনার সাথে প্রতিস্থাপনyour_username

    "export APACHE_RUN_USER=www-data" 

    প্রতিস্থাপন

    export APACHE_RUN_USER='your_username' 

7

ইতিমধ্যে সফলভাবে রচয়িতা চালানোর পরেও আমি এই সম্পর্কিত সমস্যায় পড়েছি। আমি সুরকার আপডেট করেছি, এবং যখন চলতেছি composer installবা php composer.phar installপেয়েছি:

... স্ট্রিম খুলতে ব্যর্থ: অনুমতি অস্বীকৃত ...

এটি অনেক গবেষণার পরে দেখা যাচ্ছে যে ফোল্ডারের জন্য অনুমতি পরিবর্তন করার বিষয়ে পূর্ববর্তী উত্তরগুলি কাজ করেছিল। তারা এখন কিছুটা আলাদা ডিরেক্টরি।

আমার ইনস্টল-এ, ওএস এক্স-এ, ক্যাশে ফাইলটি রয়েছে /Users/[USER]/.composer/cacheএবং আমার সমস্যা হচ্ছে কারণ ক্যাশে ফাইলটি রুটের মালিকানাধীন ছিল। আমার ব্যবহারকারীকে পুনরাবৃত্তভাবে '। কমপোজার' এর মালিকানা পরিবর্তন করা সমস্যার সমাধান করেছে।

এটি আমিই করেছি:

sudo chown -R [USER] cache

তারপরে আমি আবার সুরকার ইনস্টল করে ভয়েলা!


5

অ্যাপাচি ব্যবহারকারী (www-ডেটা) ফোল্ডারে লেখার অনুমতি না পেয়ে এই সমস্যাটি ঘটে। এই সমস্যা সমাধানের জন্য আপনাকে ব্যবহারকারীকে www www-গ্রুপের ভিতরে রাখতে হবে inside

আমি কেবল এটি তৈরি করেছি:

অ্যাপাচি <?php echo exec('whoami'); ?>দ্বারা ব্যবহৃত ব্যবহারকারী আবিষ্কার করতে এই পিএইচপি কোডটি কার্যকর করুন । এর পরে, টার্মিনালে কমান্ডগুলি প্রয়োগ করুন:

user@machine:/# cd /var/www/html

user@machine:/var/www/html# ls -l

এটি এমন কিছু ফিরে আসবে:

total of files

drwxr-xr-x 7 user group size date folder

আমি ব্যবহারকারীকে রেখেছি কিন্তু গ্রুপটি www-ডেটাতে পরিবর্তন করেছি

chown -R user:www-data yourprojectfoldername

chmod 775 yourprojectfoldername

4

সমাধান এত সহজ। কেবলমাত্র IMAGE (গন্তব্য) ফোল্ডারে ডান ক্লিক করুন, বৈশিষ্ট্যগুলিতে যান, অনুমতি ট্যাবে ক্লিক করুন এবং অন্যদের ফাইল তৈরি এবং মুছতে অ্যাক্সেস পরিবর্তন করুন


দ্রুততম উপায়, তবে আপনি কেবল এফটিপিংয়ের জন্য জিইউআই ব্যবহার করছেন (ফাইলজিলা, উইনসিসিপি)
ক্লুগ

3

কেবলমাত্র tmp_file_upload এর অনুমতিটি 755 এ পরিবর্তন করুন chmod -R 755 tmp_file_upload কমান্ডটি নিম্নলিখিত


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