উত্তর:
এই সমস্যার একটি সাধারণ এবং সাধারণ সমাধান যা হ্যাকের মতো মনে হয় তবে মোটামুটি বহনযোগ্য এটি হ'ল গতিশীল চিত্রটির জন্য প্রতিটি অনুরোধে এলোমেলোভাবে উত্পন্ন উত্পন্ন ক্যোয়ারী স্ট্রিং যুক্ত করা।
সুতরাং, উদাহরণস্বরূপ -
<img src="image.png" />
হবে
<img src="image.png?dummy=8484744" />
অথবা
<img src="image.png?dummy=371662" />
ওয়েব-সার্ভারের দৃষ্টিকোণ থেকে একই ফাইলটি অ্যাক্সেস করা হয় তবে ব্রাউজারের দৃষ্টিকোণ থেকে কোনও ক্যাচিং করা যায় না।
পৃষ্ঠাটি পরিবেশন করার সময় এলোমেলো সংখ্যা জেনারেশনটি সার্ভারে ঘটতে পারে (কেবল নিশ্চিত করুন যে পৃষ্ঠাটি নিজেই ক্যাশেড নয় ...) অথবা ক্লায়েন্টে (জাভাস্ক্রিপ্ট ব্যবহার করে)।
আপনার ওয়েব-সার্ভার এই কৌশলটি মোকাবেলা করতে পারে কিনা তা যাচাই করতে হবে।
ব্রাউজার ক্যাচিং কৌশলগুলি HTTP শিরোনাম দ্বারা নিয়ন্ত্রিত হতে পারে। মনে রাখবেন যে এগুলি সত্যই সত্য। ব্রাউজারগুলি যেহেতু এই (এবং অন্য কোনও) ক্ষেত্রে মারাত্মকভাবে বেমানান, তাই আপনাকে বিভিন্ন ব্রাউজারে পছন্দসই প্রভাব পেতে বেশ কয়েকটি শিরোনামের প্রয়োজন need
header ("Pragma-directive: no-cache");
header ("Cache-directive: no-cache");
header ("Cache-control: no-cache");
header ("Pragma: no-cache");
header ("Expires: 0");
আপনার যদি জাভাস্ক্রিপ্ট ব্যবহার করে ব্রাউজারে গতিশীলভাবে এটি করার দরকার হয় তবে এখানে একটি উদাহরণ ...
<img id=graph alt=""
src="http://www.kitco.com/images/live/gold.gif"
/>
<script language="javascript" type="text/javascript">
var d = new Date();
document.getElementById("graph").src =
"http://www.kitco.com/images/live/gold.gif?ver=" +
d.getTime();
</script>
সমাধান 1 দুর্দান্ত নয়। এটি কাজ করে, তবে আপনার চিত্রের ফাইলগুলির শেষে হ্যাকি এলোমেলো বা টাইমস্ট্যাম্পড ক্যোয়ারী স্ট্রিং যুক্ত করা ব্রাউজারটিকে প্রতিটি চিত্রের প্রতিটি সংস্করণ পুনরায় ডাউনলোড এবং ক্যাশে করে দেবে, প্রতিবার কোনও পৃষ্ঠা লোড হওয়ার সাথে সাথে, চিত্রটি আবহাওয়ার পরিবর্তে বাছাই হোক না কেন সার্ভারে।
সমাধান 2 অকেজো। যোগ করার পদ্ধতি nocache
চিত্র ফাইলের সঙ্গে হেডার শুধুমাত্র খুব কঠিন বাস্তবায়ন নয়, কিন্তু এটি সম্পূর্ণ অবাস্তব কারণ এটা করতে হবে যখন এটি আগাম প্রয়োজন হবে ভবিষ্যদ্বাণী করা , প্রথমবার যদি আপনি কোন ইমেজ যা আপনি কি মনে করেন লোড শক্তি ভবিষ্যতে কিছু সময়ে পরিবর্তন ।
পরম শ্রেষ্ঠ উপায় আমি এই সমস্যা সমাধানের পেয়েছি ব্যবহার করা ETAGS একটি .htaccess ভিতরে আপনার ছবি ডিরেক্টরির মধ্যে ফাইল। নিম্নলিখিতটি অ্যাপাচিকে চিত্র ফাইলের শিরোনামগুলির ব্রাউজারে একটি অনন্য হ্যাশ প্রেরণ করতে বলে। এই হ্যাশটি কেবল তখনই পরিবর্তিত হয় যখন ইমেজ ফাইলটি সংশোধন করা হয় এবং এই পরিবর্তনটি ব্রাউজারটিকে পরের বার অনুরোধ করার পরে চিত্রটি পুনরায় লোড করতে ট্রিগার করে।
<FilesMatch "\.(jpg|jpeg)$">
FileETag MTime Size
</FilesMatch>
আমি সমস্ত উত্তর যাচাই করেছিলাম এবং সেরাটি মনে হয়েছিল (যা তা নয়):
<img src="image.png?cache=none">
প্রথমে.
তবে, আপনি যদি ক্যাশে = কোনওটি প্যারামিটার যোগ করেন না (যা স্থিতিশীল "কিছুই নয়" শব্দ হয়) তবে এটি কোনও কিছুর উপর প্রভাব ফেলবে না, ব্রাউজার এখনও ক্যাশে থেকে লোড হয়।
এই সমস্যার সমাধান ছিল:
<img src="image.png?nocache=<?php echo time(); ?>">
যেখানে আপনি প্যারামিটারটিকে গতিশীল করতে এবং কোনও ক্যাশে তৈরি করতে মূলত ইউনিক্স টাইমস্ট্যাম্প যুক্ত করেছেন, এটি কার্যকর হয়েছে।
তবে, আমার সমস্যাটি কিছুটা আলাদা ছিল: আমি ফ্লাই জেনারেটেড পিএইচপি চার্ট চিত্রটি লোড করছিলাম এবং $ _GET পরামিতি সহ পৃষ্ঠাটি নিয়ন্ত্রণ করছিলাম। ইউআরএল জিইটি প্যারামিটার একই থাকে এবং যখন জিইটি প্যারামিটারগুলি পরিবর্তিত হয় তখন আমি ক্যাশে থেকে চিত্রটি পড়তে চেয়েছিলাম।
এই সমস্যাটি সমাধান করার জন্য, আমার হ্যাশ needed _GET দরকার ছিল তবে এটি অ্যারে হওয়ায় এটি সমাধান:
$chart_hash = md5(implode('-', $_GET));
echo "<img src='/images/mychart.png?hash=$chart_hash'>";
সম্পাদনা করুন :
যদিও উপরের সমাধানটি ঠিক কাজ করে তবে কখনও কখনও আপনি ফাইলটি পরিবর্তিত না হওয়া পর্যন্ত ক্যাশেড সংস্করণ পরিবেশন করতে চান। (উপরের সমাধান সহ এটি সম্পূর্ণরূপে সেই চিত্রটির জন্য ক্যাশে অক্ষম করে) সুতরাং, ব্রাউজার থেকে ক্যাশেড চিত্র সরবরাহ করার জন্য চিত্র ফাইলের ব্যবহারের পরিবর্তন আছে:
echo "<img src='/images/mychart.png?hash=" . filemtime('mychart.png') . "'>";
ফাইলমাইম () ফাইল পরিবর্তনের সময় পায়।
আমি জানি এই বিষয়টি পুরানো, তবে গুগলে এটি বেশ ভাল। আমি জানতে পেরেছি যে এটি আপনার হেডারে রেখে দেওয়া ভাল কাজ করে;
<meta Http-Equiv="Cache-Control" Content="no-cache">
<meta Http-Equiv="Pragma" Content="no-cache">
<meta Http-Equiv="Expires" Content="0">
<meta Http-Equiv="Pragma-directive: no-cache">
<meta Http-Equiv="Cache-directive: no-cache">
আমি কেবল এটির সমাধান খুঁজছিলাম, এবং উপরের উত্তরগুলি আমার ক্ষেত্রে কার্যকর হয়নি (এবং এগুলিতে মন্তব্য করার ক্ষেত্রে আমার যথেষ্ট অপরিসীম আছে)। এটি প্রমাণিত হয়েছে যে অন্তত আমার ব্যবহারের ক্ষেত্রে এবং আমি যে ব্রাউজারটি ব্যবহার করছিলাম (ওএসএক্সে ক্রোম), কেবল ক্যাচিং প্রতিরোধ করার জন্য কেবল একমাত্র জিনিসটি হ'ল:
Cache-Control = 'no-store'
সম্পূর্ণতার জন্য আমি এখন 'নো-ক্যাশে, নো-স্টোর, তিনটি অবশ্যই পুনরায় চালু করতে চাই'
সুতরাং আমার ক্ষেত্রে (পাইথনের ফ্লাস্কের বাইরে গতিশীল উত্পন্ন চিত্রগুলির পরিবেশন করা), আশা করি যতটা সম্ভব ব্রাউজারে কাজ করার জন্য নিম্নলিখিতগুলি করতে হয়েছিল ...
def make_uncached_response(inFile):
response = make_response(inFile)
response.headers['Pragma-Directive'] = 'no-cache'
response.headers['Cache-Directive'] = 'no-cache'
response.headers['Cache-Control'] = 'no-cache, no-store, must-revalidate'
response.headers['Pragma'] = 'no-cache'
response.headers['Expires'] = '0'
return response
চিত্রের উত্স পরিবর্তন করা সমাধান। আপনি ইমেজটিতে একটি টাইমস্ট্যাম্প বা এলোমেলো নম্বর যোগ করে এটি করতে পারেন।
চিত্রের প্রতিনিধিত্ব করে এমন ডেটা যেমন উদাহরণস্বরূপ একটি চেকসাম যুক্ত করা ভাল। এটি সম্ভব হলে ক্যাচিং সক্ষম করে।
গুচ্ছটিতে আরও একটি সমাধান যুক্ত করা যাক।
শেষে একটি অনন্য স্ট্রিং যুক্ত করা একটি নিখুঁত সমাধান।
example.jpg?646413154
নিম্নলিখিত সমাধানটি এই পদ্ধতিটিকে প্রসারিত করে এবং ক্যাচিং ক্ষমতা উভয়ই সরবরাহ করে এবং চিত্র আপডেট হওয়ার সাথে সাথে একটি নতুন সংস্করণ আনবে।
চিত্রটি আপডেট করা হলে ফাইলটাইম পরিবর্তন হবে।
<?php
$filename = "path/to/images/example.jpg";
$filemtime = filemtime($filename);
?>
এখন চিত্রটি আউটপুট করুন:
<img src="images/example.jpg?<?php echo $filemtime; ?>" >
আমি এই সমস্যা ছিল এবং এই মত কাটিয়ে ওঠা।
var newtags='<div class="addedimage"><h5>preview image</h5><img src="'+one+'?nocache='+Math.floor(Math.random() * 1000)+'"></div>';
আমি আমার অনুরূপ সমস্যা সমাধানের জন্য এটি ব্যবহার করেছি ... একটি চিত্রের কাউন্টার প্রদর্শিত হচ্ছে (বাহ্যিক সরবরাহকারী থেকে)। এটি সর্বদা সঠিকভাবে রিফ্রেশ হয়নি। এবং এলোমেলো প্যারামিটার যুক্ত হওয়ার পরে, সমস্ত ঠিকঠাক কাজ করে :)
কমপক্ষে প্রতি মিনিটে রিফ্রেশ নিশ্চিত করতে আমি একটি তারিখের স্ট্রিং যুক্ত করেছি।
নমুনা কোড (পিএইচপি):
$output .= "<img src=\"http://xy.somecounter.com/?id=1234567890&".date(ymdHi)."\" alt=\"somecounter.com\" style=\"border:none;\">";
এর ফলে একটি src
লিঙ্কে ফলাফল :
http://xy.somecounter.com/?id=1234567890&1207241014
আপনার যদি হার্ডকডযুক্ত চিত্র URL থাকে তবে উদাহরণস্বরূপ: http://example.com/image.jpg আপনি আপনার চিত্রটিতে শিরোনাম যুক্ত করতে পিএইচপি ব্যবহার করতে পারেন।
প্রথমে আপনাকে app প্রক্রিয়াটি আপনার jpg পিএইচপি হিসাবে তৈরি করতে হবে। এখানে দেখুন: এক্সটেনশন file.php.jpg দিয়ে পিএইচপি চালানো সম্ভব?
ফাইল থেকে চিত্রটি (ইমেজক্রিয়াট্রোমজপেইগ) লোড করুন তারপরে পূর্ববর্তী উত্তরগুলি থেকে শিরোনাম যুক্ত করুন। শিরোনামগুলি যুক্ত করতে পিএইচপি ফাংশন শিরোনাম ব্যবহার করুন।
তারপরে ইমেজজেপিগ ফাংশন সহ চিত্রটি আউটপুট করুন।
দয়া করে লক্ষ্য করুন যে পিএইচপি প্রক্রিয়াটি jpg চিত্রগুলিকে প্রস্থান করতে এটি অত্যন্ত সুরক্ষিত। এছাড়াও দয়া করে সচেতন থাকুন আমি এই সমাধানটি পরীক্ষা করি নি তাই এটি কাজ করা আপনার নিজের উপর নির্ভর করে।
সরল, একটি শিরোনামের অবস্থান পাঠান।
আমার সাইটটিতে একটি চিত্র রয়েছে এবং চিত্রটি আপলোড করার পরে কোনও পরিবর্তন হয় না, তারপরে আমি এই কোডটি যুক্ত করি:
<?php header("Location: pagelocalimage.php"); ?>
আমার জন্য কাজ কর.