php - move_uploaded_file "স্ট্রীম খুলতে ব্যর্থ হয়েছে: অনুমতি অস্বীকার করেছে" ত্রুটি সমস্ত কনফিগারেশনগুলির পরে আমি করেছি




linux apache (8)

আপস 2.2 ও পিএইচপি 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

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

সতর্কতা: move_uploaded_file (images / robot.jpg): স্ট্রিম খুলতে ব্যর্থ হয়েছে: লাইন 78 এ /var/www/html/mysite/process.php এ অনুমতি দেওয়া হয়েছে

সতর্কতা: move_uploaded_file (): 78 / line / on /var/www/html/mysite/process.php এ '/ tmp / phpsKD2Qm' 'images / robot.jpg' এ সরানোর জন্য অক্ষম।

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

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


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


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

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


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

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

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


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

... প্রবাহ খুলতে ব্যর্থ হয়েছে: অনুমতি প্রত্যাখ্যান ...

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

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

আমি যা করেছি তা হল:

sudo chown -R [USER] cache

তারপর আমি কম্পোজার ইনস্টল আবার voila!


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

আমি শুধু এই তৈরি:

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

[email protected]:/# cd /var/www/html

[email protected]:/var/www/html# ls -l

এটা এই মত কিছু ফিরে আসবে:

total of files

drwxr-xr-x 7 user group size date folder

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

chown -R user:www-data yourprojectfoldername

chmod 775 yourprojectfoldername

এটা আমার জন্য কাজ করেছে।

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(/.*)?'

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

  1. খোলা / etc / apache2 / envvars

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

    "export APACHE_RUN_USER=www-data" 

    প্রতিস্থাপন

    export APACHE_RUN_USER='your_username' 

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

  1. Apache প্রক্রিয়া মালিক চেক করুন: $ps aux | grep httpd $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. tmp_file_upload images এবং tmp_file_upload এখন মালিক দ্বারা tmp_file_upload হতে হবে, যদি মনে হয় [আপনি ইতিমধ্যে এই জায়গায় আছে মনে হচ্ছে]। @ ডেম্রি Teplyakov উত্তর উল্লেখ।

    $ 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 নির্দেশনা সম্পর্কেও কথা বলে।