এই ত্রুটি বার্তা উপস্থাপন করা হচ্ছে, কোন পরামর্শ?
পিএইচপিতে 33554432 বাইট অব্যাহত মেমরি আকার (43148176 বাইট বরাদ্দ করার চেষ্টা করা হয়েছে)
এই ত্রুটি বার্তা উপস্থাপন করা হচ্ছে, কোন পরামর্শ?
পিএইচপিতে 33554432 বাইট অব্যাহত মেমরি আকার (43148176 বাইট বরাদ্দ করার চেষ্টা করা হয়েছে)
উত্তর:
শেষ পর্যন্ত আমি উত্তরটি পেয়েছি:
আপনার ফাইলটিতে ত্রুটি হওয়ার আগে এই লাইনটি কেবল যুক্ত করুন
ini_set('memory_limit', '-1');
এটি সার্ভারের সীমাহীন মেমরির ব্যবহার গ্রহণ করবে, এটি ঠিক আছে।
বন্ধুদের পরামর্শ দেওয়ার জন্য ধন্যবাদ।
UNLIMITED
।
ভাগ করা হোস্টিংয়ের সীমা বাড়ানোর জন্য এখানে দুটি সহজ পদ্ধতি রয়েছে:
আপনার যদি আপনার পিএইচপি.এন.ইআই ফাইলটিতে অ্যাক্সেস থাকে, আপনার লাইনটি 32 এম দেখায় যদি the৪ এম চেষ্টা করে:
memory_limit = 64M ; Maximum amount of memory a script may consume (64MB)
যদি আপনার PHP.ini এ অ্যাক্সেস না থাকে তবে এটি একটি htaccess ফাইলে যুক্ত করার চেষ্টা করুন:
php_value memory_limit 64M
আপনার স্ক্রিপ্টটি খুব বেশি স্মৃতি ব্যবহার করছে। এটি প্রায়শই পিএইচপি-তে ঘটতে পারে যদি আপনার কোনও লুপ থাকে যা নিয়ন্ত্রণের বাইরে চলে যায় এবং আপনি লুপের প্রতিটি পাসে অবজেক্ট তৈরি বা অ্যারে যুক্ত করে চলেছেন।
অসীম লুপগুলির জন্য পরীক্ষা করুন।
যদি সমস্যা না হয় তবে পিএইচপি চেষ্টা করুন এবং আপনাকে যে জিনিসগুলি দিয়ে শেষ করেছেন তা নালায় সেট করে ধ্বংস করে দিয়ে সহায়তা করুন। যেমন।$OldVar = null;
কোডটি পরীক্ষা করুন যেখানে ত্রুটিটি আসলে ঘটবে। আপনি কি লাইনটি প্রচুর পরিমাণে মেমরি বরাদ্দ করবেন বলে আশা করবেন? যদি তা না হয় তবে চেষ্টা করে দেখুন এবং কী ভুল হয়েছে ...
করছেন:
ini_set('memory_limit', '-1');
কখনও ভাল হয় না। আপনি যদি খুব বড় ফাইলটি পড়তে চান তবে এটি কিছুটা কপি করে নেওয়া সেরা অনুশীলন। সেরা অনুশীলনের জন্য নিম্নলিখিত কোড ব্যবহার করে দেখুন।
$path = 'path_to_file_.txt';
$file = fopen($path, 'r');
$len = 1024; // 1MB is reasonable for me. You can choose anything though, but do not make it too big
$output = fread( $file, $len );
while (!feof($file)) {
$output .= fread( $file, $len );
}
fclose($file);
echo 'Output is: ' . $output;
while
লুপের পরে ফাইল হ্যান্ডলারটি বন্ধ করা ভাল :fclose($file)
দুর্ভাগ্যক্রমে পিএইচপি তে এমনভাবে প্রোগ্রাম করা সহজ যা আপনার উপলব্ধির চেয়ে দ্রুত মেমরি গ্রহণ করে। রেফারেন্স ব্যবহারের পরিবর্তে স্ট্রিং, অ্যারে এবং অবজেক্টগুলি অনুলিপি করা এটি করবে, যদিও পিএইচপি 5 পিএইচপি 4 এর চেয়ে বেশি স্বয়ংক্রিয়ভাবে এটি করবে বলে মনে করা হচ্ছে তবে আপনার ডেটা সেটটি সম্পূর্ণরূপে বিভিন্ন পদক্ষেপের সাথে সামান্যতম লজিক্যাল ইউনিট প্রক্রিয়াকরণের তুলনায় অপব্যয়ও বঞ্চিত is একেবারে. ক্লাসিক উদাহরণটি একটি ডাটাবেস থেকে বৃহত্তর ফলাফল ফলাফলের সাথে কাজ করছে: বেশিরভাগ প্রোগ্রামার পুরো ফলাফলটি একটি অ্যারেতে নিয়ে আসে এবং তারপরে এক বা একাধিকবার লুপ করে foreach()
। এটি while()
একবারে এক সারি আনতে এবং প্রক্রিয়া করতে একটি লুপ ব্যবহার করতে আরও অনেক বেশি মেমরির দক্ষ । একই জিনিসটি একটি ফাইল প্রক্রিয়াজাতকরণে প্রযোজ্য।
আপনি যদি বড় ফাইলগুলি পড়তে চান তবে একবারে একবারে পড়ার পরিবর্তে আপনার সেগুলি কিছুটা পড়ার উচিত।
এটি সহজ গণিত: আপনি যদি একবারে 1 এমবি বড় ফাইল পড়েন তবে ডেটা ধরে রাখতে একই সময়ে কমপক্ষে 1 এমবি মেমরির প্রয়োজন হয়।
সুতরাং আপনার ব্যবহার করে fopen
& বিট করে কিছুটা পড়া উচিত fread
।
$fh = fopen($folder.'/'.$filename, "rb") or die(); $buffer = 1024*1024; while (!feof($fh)) { print(fread($fh, $buffer)); flush(); } fclose($fh);
আমি পিএইচপি 7.2 তে লারাভেল 5.6 দিয়ে একই সমস্যার মুখোমুখি হয়েছি। memory_limit = 128M
আমার অ্যাপ্লিকেশনগুলির চাহিদা হিসাবে আমি কেবল php.ini এ ভেরিয়েবলের পরিমাণ বাড়িয়েছি । এটি 256M / 512M / 1048M হতে পারে ..... এখন এটি দুর্দান্ত কাজ করে।
আমারও একই সমস্যা ছিল, phpinfo.ini, php.ini বা .htaccess ফাইলগুলির কোনও লাভ হয়নি for অবশেষে আমি কিছু পিএইচপি ফাইলগুলি দেখেছি, সেগুলি খুললাম এবং মেমরির জন্য কোডগুলি ভিতরে পরীক্ষা করেছি inside অবশেষে এই সমাধানটিই আমি নিয়ে এসেছিলাম এবং এটি আমার পক্ষে কাজ করেছিল। আমি ওয়ার্ডপ্রেস ব্যবহার করছিলাম, সুতরাং এই সমাধানটি কেবল ওয়ার্ডপ্রেস মেমরির আকার সীমা সমস্যার জন্যই কাজ করতে পারে। আমার সমাধান, / সর্বজনীন_এইচটিএমএল / ডাব্লুপি-এ ফোল্ডারটিতে ডিফল্ট-কনস্ট্যান্টস.পিএইচপি ফাইল খুলুন । কোড সম্পাদকের সাহায্যে সেই ফাইলটি খুলুন এবং সুযোগের আওতায় মেমরির সেটিংসগুলি সন্ধান করুন বা "মেমরি" শব্দটি খুঁজে পেতে কেবল Ctrl + F এটি সন্ধান করুন। সেখানে আপনি আসবেন এবং । কেবল এটি বাড়ান, এটি আমার ক্ষেত্রে 64 এমবি ছিল, আমি এটিকে 128 এমবি এবং তারপরে 200 এমবিতে বাড়িয়েছি।wp_initial_constants
WP_MEMORY_LIMIT
WP_MAX_MEMORY_LIMIT
// Define memory limits.
if ( ! defined( 'WP_MEMORY_LIMIT' ) ) {
if ( false === wp_is_ini_value_changeable( 'memory_limit' ) ) {
define( 'WP_MEMORY_LIMIT', $current_limit );
} elseif ( is_multisite() ) {
define( 'WP_MEMORY_LIMIT', '200M' );
} else {
define( 'WP_MEMORY_LIMIT', '128M' );
}
}
if ( ! defined( 'WP_MAX_MEMORY_LIMIT' ) ) {
if ( false === wp_is_ini_value_changeable( 'memory_limit' ) ) {
define( 'WP_MAX_MEMORY_LIMIT', $current_limit );
} elseif ( -1 === $current_limit_int || $current_limit_int > 268435456 /* = 256M */ ) {
define( 'WP_MAX_MEMORY_LIMIT', $current_limit );
} else {
define( 'WP_MAX_MEMORY_LIMIT', '256M' );
}
}
বিটিডব্লিউ, দয়া করে নিম্নলিখিত কোডটি করবেন না কারণ এটি খারাপ অভ্যাস:
ini_set('memory_limit', '-1');
wp-config.php
, যেখানে তারা ভবিষ্যতের ওয়ার্ডপ্রেস আপডেটগুলি ওভাররাইট করা হবে না। এছাড়াও, উদাহরণস্বরূপ কয়েকটি সুরক্ষা প্লাগইন (যেমন ওয়ার্ডফেন্স) অভিযোগ করবে যদি 'কোর' ওয়ার্ডপ্রেস ফাইলগুলি পরিবর্তন করা হয় ...
wp-config.php
সেখানে দুটি লাইন সম্পাদনা করুন এবং যুক্ত করুন (i। define( 'WP_MEMORY_LIMIT', '200M' );
ও।। define( 'WP_MAX_MEMORY_LIMIT', '256M' );
'কোর' ডাব্লুপি'র ফাইলগুলির বিপরীতে (যথা নীচে সমস্ত কিছু wp-includes
), যা ডাব্লুপি আপগ্রেড দ্বারা ওভাররাইট করা wp-config.php
হবে , তা করবে না - এটি ঠিক সেখানে রয়েছে ডাব্লু ধ্রুবক অগ্রাহ্য সঠিক উদ্দেশ্য!
-1
স্বল্প-চলমান প্রক্রিয়া জন্য ঠিক আছে। উদাহরণস্বরূপ একটি পিএইচপি বিল্ডার ধারক যা ইউনিট পরীক্ষা চালানোর জন্য বা সুরকার ইনস্টল / ইত্যাদির জন্য ব্যবহৃত হয়। আপনার প্রযোজনার সাইটটি ঠিক তেমনভাবে চালাবেন না।
স্ক্রিপ্টের সমস্ত কোডের উপরে নিম্নলিখিত লাইনটি সম্পাদন করে আপনি পিএইচপি স্ক্রিপ্টে অনুমোদিত মেমরিটি বাড়িয়ে দিতে পারেন:
ini_set('memory_limit','-1'); // enabled the full memory available.
এবং স্ক্রিপ্টে অবাঞ্ছিত ভেরিয়েবলগুলি ডি বরাদ্দ করুন।
এই পিএইচপি লাইব্রেরিটি দেখুন: পিএইচপি দিয়ে মেমরি মুক্ত করা
আমি অনেক উত্তর লক্ষ্য করেছি কেবল একটি স্ক্রিপ্টে দেওয়া মেমরির পরিমাণ বাড়ানোর চেষ্টা করুন যা এর স্থান রয়েছে তবে প্রায়শই এটির অর্থ এই নয় যে কোনও ভলিউম বা আকারের অপ্রত্যাশিত কারণে স্মৃতিতে কোনও কিছু খুব উদার হয়ে উঠছে। স্পষ্টতই যদি আপনি কোনও স্ক্রিপ্টের লেখক না হন তবে আপনার লেখকের করুণা না থাকলে আপনার উচ্চাভিলাষী অনুভূত হয় :) পিএইচপি ডকস এমনকি মেমরির সমস্যাগুলি " দুর্বল লিখিত স্ক্রিপ্টগুলির " কারণে বলে দেয়
এটি উল্লেখ করা উচিত যে ini_set('memory_limit', '-1');
(কোনও সীমা নেই) সার্ভারের অস্থিরতার কারণ হতে পারে 0 bytes free = bad things
। পরিবর্তে, আপনার স্ক্রিপ্টটি কী করার চেষ্টা করছে এবং একটি মেশিনে উপলব্ধ মেমরির পরিমাণের দ্বারা একটি যুক্তিসঙ্গত ভারসাম্য সন্ধান করুন।
আরও ভাল পদ্ধতির: আপনি যদি স্ক্রিপ্টটির লেখক (বা উচ্চাভিলাষী) আপনি xdebug দিয়ে এই জাতীয় মেমরি সমস্যাগুলি ডিবাগ করতে পারেন । সর্বশেষতম সংস্করণ (২.6.০ - প্রকাশিত 2018-01-29) মেমরির প্রোফাইল ফিরিয়ে এনেছে যা আপনাকে দেখায় যে ফাংশন কলগুলি কী পরিমাণে প্রচুর পরিমাণে মেমরি গ্রহণ করছে। এটি স্ক্রিপ্টে এমন সমস্যাগুলি প্রকাশ করেছে যা অন্যথায় খুঁজে পাওয়া শক্ত। সাধারণত, অদক্ষতাগুলি এমন একটি লুপে থাকে যা এটি গ্রহণ করার পরিমাণের প্রত্যাশা করে না, তবে প্রতিটি ক্ষেত্রে পাঠকের কাছে অনুশীলন হিসাবে ছেড়ে দেওয়া হবে :)
Xdebug ডকুমেন্টেশন সহায়ক, কিন্তু এটা 3 পদক্ষেপ নিচে boils:
apt-get
এবং yum
ইত্যাদিxdebug.profiler_enable = 1
,xdebug.profiler_output_dir = /where/ever/
আপনি যদি কোনও ফাইল পড়ার চেষ্টা করছেন তবে এটি পিএইচপি-তে মেমরি গ্রহণ করবে। উদাহরণস্বরূপ, আপনি যদি একটি এমপি 3 ফাইল খোলার এবং পড়ার চেষ্টা করছেন (যেমন, বলুন, $ ডেটা = ফাইল (" http://mydomain.com/path/sample.mp3 ")) এটি এটিকে সমস্ত স্মৃতিতে টানতে চলেছে ।
নেলসনের পরামর্শ অনুসারে, আপনার যদি এতো বেশি স্মৃতি ব্যবহার করার দরকার হয় তবে আপনি আপনার সর্বাধিক স্মৃতি সীমা বাড়াতে কাজ করতে পারেন।
আমাদের একই অবস্থা ছিল এবং আমরা ini_set ('মেমরি_লিট', '-1') এর উত্তরগুলির উপরে দেওয়া চেষ্টা করেছিলাম; এবং সবকিছু সূক্ষ্মভাবে কাজ করেছে, সংক্ষেপিত চিত্রগুলির ফাইলগুলি 1MB থেকে কেবিএসের চেয়ে বেশি।
আপনি যদি একটি ভাগ করা হোস্টিং ব্যবহার করছেন, আপনি পিএইচপি আকার সীমাতে বৃদ্ধি প্রয়োগ করতে সক্ষম হবেন না।
কেবল আপনার সিপ্যানেলে যান এবং আপনার পিএইচপি সংস্করণটি 7.1 এবং তারপরে উন্নীত করুন তবে আপনি যেতে ভাল to
আমি আমার হোস্টিং পুনর্নবীকরণ করি নি এবং ডাটাবেসটি কেবল পঠনযোগ্য। জুমলার অধিবেশনটি লেখার দরকার ছিল এবং এটি করতে পারিনি।
আমার একই সমস্যা ছিল যা পিএইচপি কমান্ড লাইনে চলছে। সম্প্রতি, আমি php.ini ফাইল পরিবর্তন করেছি এবং php.ini পরিবর্তন করার সময় একটি ভুল করেছি
এটি পিএইচপি 7.0 এর জন্য
php.ini এর পথে যেখানে আমি ভুল করেছি:
/etc/php/7.0/cli/php.ini
আমি সেট করেছিলাম memory_limit = 256
(যার অর্থ 256 bytes
)
পরিবর্তে memory_limit = 256M
(যার অর্থ 256 Mega bytes
)।
; কোনও স্ক্রিপ্ট সর্বাধিক পরিমাণ মেমরি গ্রাস করতে পারে (128MB)
; http://php.net/memory-limit
memory_limit = 128M
একবার এটি সংশোধন করার পরে, আমার প্রক্রিয়াটি ঠিকঠাক শুরু হয়েছিল।
আপনার ম্যাজেন্টো মূল ডিরেক্টরিতে এই কমান্ডটি চালান php -d memory_limit=4G bin/magento
আপনি যদি লারাভেল ব্যবহার করছেন তবে এই উপায়গুলি ব্যবহার করুন
public function getClientsListApi(Request $request){
print_r($request->all()); //for all request
print_r($request->name); //for all name
}
পরিবর্তে
public function getClientsListApi(Request $request){
print_r($request); // it show error as above mention
}