ফাইল_পুট_কন্টেন্টস - স্ট্রিমটি খুলতে ব্যর্থ হয়েছে: অনুমতি অস্বীকৃত


98

আমি ডিবাগিংয়ের জন্য একটি ফাইলে একটি ক্যোয়ারী লেখার চেষ্টা করছি। ফাইলটি রয়েছে database/execute.php। আমি যে ফাইলটি লিখতে চাই তা হ'ল database/queries.php

আমি ব্যবহার করার চেষ্টা করছি file_put_contents('queries.txt', $query)

কিন্তু আমি পাচ্ছি

ফাইল_পুট_কন্টেন্টস (ক্যোরিজ টেক্সট) [ফাংশন.ফায়াল-পুট-সামগ্রী]: স্ট্রিম খুলতে ব্যর্থ হয়েছে: অনুমতি অস্বীকার করেছে

আমি queries.txtchmod'd ফাইলটি 777 এ রেখেছি, সমস্যাটি কী হতে পারে?


আপনি কি এমন php.iniকোনও কিছুর জন্য ফাইলটি দেখেছেন যা ফাইল অ্যাক্সেসকে অস্বীকার করতে পারে?
হ্যালো 71

4
ডিরেক্টরিটি chmod'd ঠিক আছে তাও নিশ্চিত করুন
ভায়োলেন্ট

4
পরম ফাইল নাম ব্যবহার করার চেষ্টা করুন। এটা ঠিক হতে পারে বর্তমান ফোল্ডার আপনার ব্যাখ্যা থেকে পিএইচপি এর ভিন্ন
laher

4
আপনি যে chmod স্থিতি ডাবল চেক করতে পারেন?
জোনা

4
আছে: সমস্যার এই ধরনের একটি সমস্যা সমাধান চেকলিস্ট হয় stackoverflow.com/questions/36577020/...
ভিক Seedoubleyew

উত্তর:


74

ডিরেক্টরি অনুমতিগুলি সামঞ্জস্য করার চেষ্টা করুন।

টার্মিনাল থেকে চালান chmod 777 database(ডিরেক্টরি থেকে ডাটাবেস ফোল্ডার রয়েছে)

যদি সঠিকভাবে chmodd'd করা থাকে তবে অ্যাপাচি এবং কারওরই এই ডিরেক্টরিতে অ্যাক্সেস থাকবে না।

অন্যান্য কাজটি হ'ল প্রতিধ্বনি "getcwd ()"। এটি আপনাকে বর্তমান ডিরেক্টরিটি প্রদর্শন করবে এবং এটি যদি '/ কিছু কিছু... / ডেটাবেস /' না হয় তবে আপনার সার্ভারের জন্য 'ক্যোয়ার.টেক্সট' পুরো পথটিতে পরিবর্তন করতে হবে।


106
777 সুরক্ষা ঝুঁকি না?
হাইটাটোডস্ট্রাকচার

12
আমি দৃ strongly়ভাবে সন্দেহ করি যে সার্ভার অ্যাকাউন্ট দ্বারা লক্ষ্য ডিরেক্টরিটি কেবল লেখার যোগ্য নয়, তবে লক্ষ্য ডিরেক্টরিটির প্রতিটি পিতামাতাকে অবশ্যই সার্ভার অ্যাকাউন্টটিকে এতে নেভিগেট করার অনুমতি দিতে হবে; আমি মনে করি এটি অনুমতিগুলির + x হবে।
এরহানিস

4
আমি একটি নতুন এলএএমপি স্ট্যাকের উপর এরহানিসের তত্ত্বগুলি পরীক্ষা করেছি এবং তত্ত্বটি সঠিক।
থোথোহল

4
@ মজিদফৌলদপুর আমি মনে করি chmod +x /parent/directory, টার্গেটের প্রতিটি প্যারেন্ট ডিরেক্টরি জন্য for chmod +x /parent/directory, chmod +x /parentইত্যাদি।
এরহানিস

4
: এখন সমস্যার এই ধরনের একটি সমস্যা সমাধান চেকলিস্ট হয় stackoverflow.com/questions/36577020/...
ভিক Seedoubleyew

19

অন্য বিকল্প

এই যে আপনি করতে পারেন Apache (www-data), ফোল্ডারের মালিক

sudo chown -R www-data:www-data /var/www

এটি file_put_contentsএখন কাজ করা উচিত । তবে আরও সুরক্ষার জন্য আপনি নীচের মতো অনুমতিগুলি আরও ভাল করে সেট করুন

find /var/www -type d -print0 | xargs -0 chmod 0755 # folder
find /var/www -type f -print0 | xargs -0 chmod 0644 # files
  • /var/wwwআপনার পিএইচপি ফাইলগুলির মূল ফোল্ডারে পরিবর্তন করুন

7

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

'সাধারণ ক্যোয়ারী লগ' এর জন্য ডকুমেন্টেশনটি একবার দেখুন:

http://dev.mysql.com/doc/refman/5.1/en/query-log.html


3

বন্ধুরা আমার 1 মাস ধরে এই সমস্যাটি ছিল এবং আমি সবকিছু করেছি তবে এটি ঠিক করতে পারিনি, তবে এখন আমি সমাধানটি জানি।

আমি একটি ভাগ করা লিনাক্স হোস্টিং ব্যবহার করি, যখন আমার প্রশাসক পিএইচপি 5.3 এ পরিবর্তন করে আমি "ফাইল_পুট_কন্টেন্টস" কোডের জন্য অনেক ত্রুটি পেয়েছি। আমার পরিকল্পনা পরীক্ষা করার চেষ্টা করুন:

আপনার হোস্টে মাইস্টেস্ট.এফপি এর মতো একটি ফাইল তৈরি করুন এবং এই কোডটি প্রবেশ করুন এবং সংরক্ষণ করুন:

<?php        mail('Your-EMail','Email-Title','Email-Message');        ?>

"Www.your-domain.com/mytest.php" URL টি একবার খুলুন এবং তারপরে আপনার ইমেলটি পরীক্ষা করুন। আপনি mytest.php এ প্রবেশ করেছেন এমন তথ্য সহ আপনার হোস্টের একটি ইমেল থাকা উচিত, প্রেরকের নামটি পরীক্ষা করুন। থেকে তার যদি কেউ আপনাকে "অস্বীকৃত অনুমতি" সম্পর্কে সমস্যা আছে কারণ কিছু সংজ্ঞায়িত করা এবং যদি প্রেরকের নাম আমার আইডি মত হল: iietj8qy@hostname5.netly.net আপনি PROB আছে না।

আমার অ্যাডমিন সার্ভার পরিবর্তন করেছে এবং হোস্টটি আবার ইনস্টল করেছে আমি মনে করি এবং সমস্যাটি সমাধান হয়ে গেছে, আমি আপনাকে যা বলেছি তা আপনার হোস্ট প্রশাসনের কাছে জানান এবং তারা উত্তর খুঁজে পান find

আশা করি এটি আপনাকে সাহায্য করবে!


আমি পুরোপুরি হারিয়ে গেছি !! তুমি কি বলতে চাচ্ছ? আপনি যদি বলছেন যে অ্যাপাচি ব্যবহারকারী সার্ভারে হোস্ট-নেম (ভাগ করা বা যাই হোক না কেন) পেতে অক্ষম হয়েছিলেন, তবে আপনি হোস্টিং পরিষেবাদির পছন্দটি পুনর্বিবেচনা করার জন্য এটি উচ্চ সময়।
Fr0zenFyr

3

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

লিনাক্সে অনুমতিগুলি তিন অঙ্ক সহ উপস্থাপিত হতে পারে। প্রথম অঙ্কটি ফাইলগুলির মালিকের অনুমতি নির্ধারণ করে। দ্বিতীয় সংখ্যাটি ব্যবহারকারীর একটি নির্দিষ্ট গোষ্ঠীর অনুমতি। তৃতীয় অঙ্কটি সেই সমস্ত ব্যবহারকারীর জন্য অনুমতিগুলি নির্ধারণ করে যা এই গোষ্ঠীর মালিক বা সদস্য নয়।

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

আপনি যে ডিরেক্টরিতে ফাইলের সামগ্রীর যথাযথ অধিকার পরিবর্তন করতে চান তা দিতে, বিবৃতিটি কার্যকর করুন:

find %DIR% -type d -exec chmod 770 {} \;

.এটি ওপি-র প্রশ্নের মধ্যে বোঝায় যে "% মূল%" / ডাটাবেস ডিরেক্টরিটির অনুমতি অনুসারে পরিবর্তন করা উচিত। সেই ডিরেক্টরিতে এমন ফাইল না থাকা গুরুত্বপূর্ণ যেগুলি কখনই বদলাবে না বা মুছে ফেলা উচিত নয়। যার জন্য ফাইলগুলির জন্য পৃথক ডিরেক্টরি তৈরি করা ভাল অনুশীলন।

ডিরেক্টরিতে অনুমতি (4) পড়ার অর্থ হ'ল ডিরেক্টরিগুলির মধ্যে তাদের মেটাডেটা সহ সমস্ত ফাইল এবং ডিরেক্টরিগুলি সংগ্রহ করতে সক্ষম হওয়া। লেখার অনুমতিগুলি (2) ডিরেক্টরিতে থাকা সামগ্রীর পরিবর্তন করার অনুমতি দেয়। ফাইলগুলি যুক্ত করা এবং মুছে ফেলা, অনুমতিগুলি পরিবর্তন করা ইত্যাদি lying কার্যকর করার অনুমতি কার্যকর করা (1) এর অর্থ হল যে আপনাকে সেই ডিরেক্টরিতে যাওয়ার অধিকার আছে have দ্বিতীয়টি বাদে ডিরেক্টরিটির আরও গভীরে যাওয়া অসম্ভব। ওয়েবসভারটির যখন কোনও ফাইলের বিষয়বস্তু পরিবর্তন করা উচিত তখন অনুমতিগুলি পড়ার, লেখার এবং সম্পাদনের প্রয়োজন। তার জন্য গ্রুপটি ডিজিট 7 প্রয়োজন 7

দ্বিতীয় বিবৃতিটি ওপি-র প্রশ্নের মধ্যে রয়েছে:

find %DOCUMENT_ROOT%/database -type f -exec chmod 760 {} \;

একটি দস্তাবেজ পড়তে এবং লিখতে সক্ষম হওয়া প্রয়োজন, তবে ফাইলটি কার্যকর করার প্রয়োজন হয় না। 7 টি ফাইলগুলির মালিককে দেওয়া হয়, 6 টি গ্রুপকে। ওয়েবসভারটির বিষয়বস্তু পরিবর্তন করার জন্য ফাইলটি সম্পাদন করার অনুমতি প্রয়োজন নেই। এই লেখার অনুমতিগুলি কেবলমাত্র সেই ডিরেক্টরিতে থাকা ফাইলগুলিতে দেওয়া উচিত।

অন্য সমস্ত ব্যবহারকারীদের কোনও অনুমতি দেওয়া উচিত নয়।

যে ডিরেক্টরিগুলির জন্য ফাইলগুলি পরিবর্তন করার প্রয়োজন হয় না তাদের জন্য পর্যাপ্ত 5 এর গোষ্ঠী অনুমতি রয়েছে। অনুমতি এবং কিছু উদাহরণ সম্পর্কে ডকুমেন্টেশন:

https://wiki.debian.org/ পারমিশন

https://www.linux.com/learn/tutorials/309527- বোঝা-linux-file-perifications

http://www.linux.org/threads/file-permission-chmod.4094/


3

এই লিঙ্কটি থেকে স্ট্যাকওভারফ্লো-চিত্র সংরক্ষণের তথ্য সংগ্রহ করা chmod 777 এর সাথে এবং ব্যবহারকারী আজেরাফি এবং লোকে বার্গম্যানের সাথে কাজ করে না

আপনি যদি / etc / apache / envvars ফাইলের নিচে দেখতে চান তবে আপনি এমন কিছু দেখতে পাবেন:

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

অ্যাপাচি 'www-ডেটা' ব্যবহারকারীর নাম অনুসারে চালিত হয়

'0755' অর্থ ফাইলের মালিক পড়তে / লিখতে / চালাতে পারে তবে গ্রুপ এবং অন্যান্য ব্যবহারকারীরা লিখতে পারে না। সুতরাং আপনার টার্মিনালে, আপনার 'চিত্রগুলি' ফোল্ডার যুক্ত ফোল্ডারে সিডি করুন। তারপরে টাইপ করুন:

find images -type d -exec chmod 0755 {} \;
find images -type f -exec chmod 0755 {} \;
sudo chown -R www-data:www-data images

মালিক পরিবর্তন করার আগে আপনাকে অবশ্যই মনের পরিবর্তন করতে হবে। অনুরোধ করা হলে আপনার পাসওয়ার্ড লিখুন. এটি চিত্রগুলির ফোল্ডারের মালিক 'www-ডেটা' করবে।

আপনার আপলোড এখন কাজ করা উচিত।


1

যে কেউ উবুন্টু ব্যবহার করে এবং স্থানীয়ভাবে পৃষ্ঠাটি লোড করার সময় এই ত্রুটিটি গ্রহণ করে তবে ওয়েব হোস্টিং পরিষেবাতে নয়,

আমি কেবল এটি নটিলাস ( sudo nautilus) খোলার মাধ্যমে ঠিক করেছি এবং আপনি যে ফাইলটি খোলার চেষ্টা করছেন তার উপর ডান ক্লিক করুন, বৈশিষ্ট্য> সেটিংস> ক্লিক করুন এবং 'অন্য সবাইকে' পড়ার লিখন দিন


0

একই সমস্যা ছিল; আমার ইস্যুটি সেলিনাক্স কার্যকর হয়েছিল।

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


0

নিম্নলিখিত পদক্ষেপগুলির সাথে সমাধানে এটি সমাধান করা যেতে পারে:

1. $ php artisan cache:clear

2. $ sudo chmod -R 777 storage

3. $ composer dump-autoload

আশা করি এটা সাহায্য করবে


0

আপনি যদি স্থানীয় থেকে সার্ভারে গিটটি টানছেন তবে আপনাকে কখনও কখনও ক্যাশে সাফ করাতে হবে কারণ ভিউ ফাইলগুলি এটি / অথবা অন্যান্য ক্যাশেড ফাইলের সাথে আপলোড হয়।

php artisan cache:clear

আপনার অ্যাপ্লিকেশনটি গিট টানার আগে কাজ করে থাকলে কখনও কখনও এটি কৌশলটি হতে পারে


0

এই সাহায্য করতে পারে। এটা আমার জন্য কাজ করেছে। টার্মিনালে এটি চেষ্টা করুন

setenforce 0


-3

এখানে সমাধান। একটি URL থেকে একটি img অনুলিপি করতে। এই ইউআরএল:http://url/img.jpg

$image_Url=file_get_contents('http://url/img.jpg');

কাঙ্ক্ষিত পথটি দিয়ে নামটি শেষ করুন .jpg

$file_destino_path="imagenes/my_image.jpg";

file_put_contents($file_destino_path, $image_Url)

-3

এই সমস্যাগুলি সমাধান করার 2 উপায় রয়েছে
use ব্যবহার করুন chmod 777 path-to-your-directory
এটি যদি কাজ না করে তবে
২. আপনার ফাইলটির সম্পূর্ণ পথ সরবরাহ করুন query.txt


4
এটি মারাত্মকভাবে নিরাপত্তাহীন এবং অত্যন্ত খারাপ অনুশীলন। কাস্টম অ্যাপ্লিকেশনগুলি বিকাশ করার সময় এটি সনাক্ত করা এবং সঠিক করাও সহজ এবং সহজেই উপেক্ষা করা যায়। দয়া করে সঠিক অনুমতিগুলি খুঁজে বের করুন।
ftrotter

-11

উপরন্তু, যেমন বললেন মধ্যে file_put_contents man pageমধ্যে php.net, বিষয় নামকরণ হুঁশিয়ার।

file_put_contents($dir."/file.txt", "hello");

কাজ করতে পারে না (যদিও এটি সিনট্যাক্সের ক্ষেত্রে সঠিক) তবে but

file_put_contents("$dir/file.txt", "hello");

কাজ করে। আমি এটি বিভিন্ন পিএইচপি ইনস্টল করা সার্ভারে অভিজ্ঞতা করেছি।


17
এটি সঠিক নয়। সমস্ত ক্ষেত্রে কার্যত $dir."/file.txt"সমতুল্য "$dir/file.txt", ধরে $dirনেওয়া একটি স্ট্রিং। তদ্ব্যতীত, কিভাঙ্ক দাবি করেছেন, এই আচরণটি php.net এ নথিভুক্ত করা হয়নি।
ম্যাটবস্টা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.