পিএইচপি কি php.ini ফাইলটিতে কোনও বিশ্লেষণ করে?


24

RHEL 7.7 এর অধীনে পিএইচপি সংস্করণ 7.1.30 চলছে।

আমি মেমোরি_লিমিটকে টুকরো টুকরো করতে চাই, তবে নিশ্চিত ছিলাম না যে আমার কাছে সিনট্যাক্সটি ঠিক আছে (অর্থাত 256M বা 256MB)। সুতরাং শুরু করার জন্য আমি মেমোরিয়ালিমেট সেটিং হিসাবে একটি খারাপ মান "হুগো" রেখেছি। এটির সাথে সমস্যাটি হ'ল phpinfo () (httpd এর অধীনে চালানো) আক্ষরিক অর্থে "হুগো" স্ট্রিং রয়েছে যার অর্থ:

এখানে চিত্র বর্ণনা লিখুন

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

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


4
দুর্দান্ত প্রশ্ন।
Tink

3
এ থেকে: php.net/manual/en/faq.using.php#faq.using.shorthandbytes আমি ধরে নিলাম এটি এর মতোই (int) 'HUGO'; // => 0। যা আমার মেশিনে 2MB মেমরির ব্যবহৃত ব্যর্থ হতে শুরু করে।
যোশি


@ যোশি আমার ধারণা আপনার উত্তরটি প্রকাশ করা উচিত। এটি একটি ভাল ব্যাখ্যা
ম্যাকসেম ফেদোরভ

@ ম্যাক্সেমফেদোরভ আমার দ্বিধায়নের কোন সত্যিকারের উল্লেখ নেই বলে আমি দ্বিধাগ্রস্ত। আপাতত এটি কেবল একটি পর্যবেক্ষণ।
যোশি

উত্তর:


19

এখানে বিভ্রান্তকর বিষয়টি হ'ল সেটিংসটি কিছু বিশেষ সিনট্যাক্স সহ একটি পূর্ণসংখ্যার মতো লাগে তবে অভ্যন্তরীণভাবে স্ট্রিং হিসাবে সংজ্ঞায়িত হয়। স্ট্রিংটি পৃথক বৈশ্বিক চলকতে পার্স করা হয় যখনই মান পরিবর্তন হয়। গুরুতরভাবে, একটি পূর্ণসংখ্যার স্ট্রিংকে পার্স করার ফলাফল সেটিংস টেবিলটিতে ফিরে সংরক্ষিত হয় না, সুতরাং যখন আপনি কল করবেন তখন আপনি phpinfo()মূল ইনপুটটি দেখবেন, পার্স করা মানটি নয়।

আপনি উত্স এ দেখতে পারেন:

সমর্থিত বাক্য গঠনটি শেষ পর্যন্ত সংজ্ঞায়িত করা হয় zend_atol, যা:

  1. কোনও অতিরিক্ত পাঠ্য উপেক্ষা করে একটি সংখ্যাসূচক মানটির জন্য স্ট্রিংকে পার্স করে
  2. স্ট্রিং এর শেষ অক্ষর এ দেখায়, এবং তা বৃদ্ধি পায় পূর্ববর্তী মান এটা হলে g, G, m, M, k, অথবাK

শুরুতে কোনও সংখ্যা ছাড়াই একটি মান শূন্য হিসাবে পার্স করা হবে। গ্লোবাল ভেরিয়েবল সেট করার সময়, ধ্রুবকের উপর ভিত্তি করে এটি ন্যূনতম অনুমোদিতকে মেমরি সীমাটি সেট করে ZEND_MM_CHUNK_SIZE

আপনি মেমরির সীমাটি সেট করে, তারপরে একটি লুপ চালিয়ে যা দ্রুত প্রচুর পরিমাণে মেমরির বরাদ্দ করে এবং ত্রুটি বার্তায় কী উপস্থিত হয় তা দেখে আপনি প্রভাবটি দেখতে পাচ্ছেন। এই ক্ষেত্রে:

# Invalid string; sets to compiled minimum
php -r 'ini_set("memory_limit", "HUGO"); while(true) $a[]=$a;'
# -> PHP Fatal error:  Allowed memory size of 2097152 bytes exhausted

# Number followed by a string; takes the number
php -r 'ini_set("memory_limit", "4000000 HUGO"); while(true) $a[]=$a;'
# -> PHP Fatal error:  Allowed memory size of 4000000 bytes exhausted

# Number followed by a string, but ending in one of the recognised suffixes
# This finds both the number and the suffix, so is equivalent to "4M", i.e. 4MiB
php -r 'ini_set("memory_limit", "4 HUGO M"); while(true) $a[]=$a;'
# -> PHP Fatal error:  Allowed memory size of 4194304 bytes exhausted

এই দুর্দান্ত মূল্যায়নের জন্য আপনাকে @ আইএমএসপিকে ধন্যবাদ জানাই। একজনকে কি এই ধরণের জিনিসটি কোনও ধরণের বাগ-ট্র্যাকারে রিপোর্ট করা উচিত? আমি phpinfo () অত্যন্ত প্রতিক্রিয়া স্বাক্ষরিত যে প্রতিক্রিয়া খুঁজে পাই। এবং যখন কিছু অপ্রত্যাশিত মানগুলির মুখোমুখি হয় তখন পিএইচপি কি করে তার জন্য কিছু ডিবাগ আউটপুট ভুল হয় না।
Tink

1
@ টিঙ্কটি আমি অনুমান করি আপনি বাগস.এফপিএনএফ- তে একটি বৈশিষ্ট্য অনুরোধ উত্থাপন করতে পারেন বা অভ্যন্তরীণ মেইলিং তালিকায় একটি বার্তা প্রেরণ করতে পারেন যেখানে বেশিরভাগ সমন্বয় ঘটে। আমি বেশ কয়েক বছর আগে থেকে অনুরূপ অনুরোধ পেয়েছি , তবে মনে হয় এটির কোনও প্রতিক্রিয়া ছিল না।
আইএমএসওপি

আবারও ধন্যবাদ, এটি দেখতে হবে! :)
Tink

0

প্রথমত প্রথমত, আমাদের প্রথমে বুঝতে হবে পিএইচপি.এন.আই কীভাবে ব্যাখ্যার কার্যপ্রবাহের পথে কাজ করে। মেমরি_লিট পিএইচপি-র জন্য নির্দেশনা।

পিএইচপি ফাংশন ব্যবহার করার সময় আপনাকে এরকম কিছু করতে হবে ini_set(‘memory_limit’,’256MB’)। সুতরাং, এই ফাংশনটি অস্থায়ীভাবে ইন্টারপ্রেটার ভেরিয়েবলটিতে আপনার মান সেট করে। আপনি যদি কাছাকাছি দেখতে পান তবে দুটি কলাম পেতে পারেন একটি স্থানীয় এবং এক বিশ্বব্যাপী। এটি যথাক্রমে পৃথক ব্যক্তির কাছে মানগুলির সক্ষমতা দেখায়।

তবে, আপনি যখন বিশ্বব্যাপী জন্য সংজ্ঞা দিয়েছেন আপনার যথাক্রমে কে, এম, জি এর সাথে প্রত্যয় হিসাবে সেট করতে হবে। যদি আমরা অ্যাপাচি .htaccess ব্যবহার করে এই মানটি অতিক্রম করি তবে পিএইচপি এফপিএম এর জন্য এটির একই প্রয়োজন।


3
আমি দয়া করে উল্লেখ করতে চাই যে ওপি মেমরির সীমাটি কীভাবে সেট করবেন তা জিজ্ঞাসা করছে না :)
ক্যারোলিস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.