ফাইল_জেট_কন্টেন্টস () এর কি একটি টাইমআউট সেটিংস আছে?


152

আমি লিংকগুলি ব্যবহার করে একটি সিরিজ কল করছি file_get_contents() পদ্ধতিটি । প্রতিটি লিঙ্ক প্রক্রিয়া করতে 15 মিনিটেরও বেশি সময় নিতে পারে। এখন, আমি চিন্তিত যে পিএইচপি এর file_get_contents()একটি সময়সীমা আছে?

যদি হ্যাঁ, তবে এটি একটি কল দিয়ে সময় শেষ হয়ে যাবে এবং পরবর্তী লিঙ্কে চলে যাবে। পূর্বের একটি শেষ না করে আমি পরবর্তী লিঙ্কটিতে কল করতে চাই না।

সুতরাং, দয়া করে আমাকে বলুন file_get_contents()একটি সময়সীমা আছে কিনা । এতে থাকা ফাইলটি শূন্যে file_get_contents()সেট করা set_time_limit()হয়েছে (সীমাহীন)।


ক্রস-রেফারেন্স: পিএইচপি
তে

আমি ভিজ্যুয়াল স্টুডিও পিএইচপি প্রকল্পে ভিজুয়াল স্টুডিও এক্সটেনশনের জন্য পিএইচপি সরঞ্জাম ব্যবহার করে এমন একই আচরণ (একই "সার্ভারে URL টি জিজ্ঞাসা করার সময় সময়সীমা) অনুভব করেছি। আরও তথ্য এখানে
উয়ে কেইম

একই ওয়েবসাইটটিতে কোনও URL টি জিজ্ঞাসা করার জন্য অন্তর্নির্মিত পিএইচপি সার্ভার ব্যবহার করার সময়ও এটি ঘটে , কারণ এটি একক থ্রেডেড ওয়েব সার্ভার।
উয়ে কেইম

উত্তর:


298

ডিফল্ট টাইমআউটটি default_socket_timeoutইনআই-সেটিং দ্বারা সংজ্ঞায়িত করা হয় , যা 60 সেকেন্ড। আপনি এটিকে উড়েও পরিবর্তন করতে পারেন:

ini_set('default_socket_timeout', 900); // 900 Seconds = 15 Minutes

সময় পার হয়ে সেট করতে আরেকটি উপায় ব্যবহার করতে হবে stream_context_createযেমন সময়সীমার সেট করতে HTTP- র প্রসঙ্গ অপশন এর HTTP- র প্রবাহ মোড়কের ব্যবহারে:

$ctx = stream_context_create(array('http'=>
    array(
        'timeout' => 1200,  //1200 Seconds is 20 Minutes
    )
));

echo file_get_contents('http://example.com/', false, $ctx);

8
আপনি কীভাবে https url এর সময়সীমা নির্ধারণ করবেন সে সম্পর্কে তথ্য দিতে পারেন?
বিনয়

11
এই জিনিসটি পুরোপুরি কাজ করছে না, যদি আপনার মান 1200 হয় তবে এটির প্রকৃত পরিমাণ 2400 i আমি কেবল এটি পরীক্ষা করে দেখছি।
টমসওয়ায়ার

15
ডিফল্ট_সকেট_টাইমআউট, স্ট্রিম_সেট_টাইমআউট এবং স্ট্রিম_কন্টেক্সট_ক্রিয়েট টাইমআউট হ'ল প্রতিটি লাইনের পড়ার / লেখার সময়সীমা, পুরো সংযোগের সময়সীমা নয়।
diyism

32

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

ব্যবহারের বিকল্প হিসাবে file_get_contents, আপনি সর্বদা curlসময়সীমা সহ ব্যবহার করতে পারেন ।

সুতরাং এখানে একটি কার্যকারী কোড যা লিঙ্কগুলি কল করার জন্য কাজ করে।

$url='http://example.com/';
$ch=curl_init();
$timeout=5;

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);

$result=curl_exec($ch);
curl_close($ch);
echo $result;

1
এই উত্তরটি সংযোগের মেয়াদ উত্তীর্ণের fsockopenপরিবর্তে ( পরিবর্তে ব্যবহার করে curl) নিয়ন্ত্রণ করার জন্য আরেকটি পদ্ধতি দেয় : স্ট্যাকওভারফ্লো.
com

2
আপনার কার্ল মধ্যে CURLOPT_CONNECTTIMEOUT এবং CURLOPT_TIMEOUT উভয়ই সেট করা উচিত। দেখুন stackoverflow.com/a/27776164/1863432
bhelm

2
কোনও বৈধ প্রতিক্রিয়া নয়, প্রশ্নটি "ফাইল_জেট_কন্টেন্টস" এর জন্য। প্রতিক্রিয়া দুর্দান্ত তবে অমূলক।
ই-তথ্য 128

8

হ্যাঁ! তৃতীয় প্যারামিটারে একটি স্ট্রিম প্রসঙ্গটি পাস করে :

এখানে 1 সেকেন্ডের সময়সীমা সহ :

file_get_contents("https://abcedef.com", 0, stream_context_create(["http"=>["timeout"=>1]]));

Https://www.php.net/manual/en/function.file-get-contents.php এর মন্তব্য বিভাগে উত্স

HTTP প্রসঙ্গ বিকল্পসমূহ :

method
header
user_agent
content
request_fulluri
follow_location
max_redirects
protocol_version
timeout

অন্যান্য প্রসঙ্গ: https://www.php.net/manual/en/context.php


1
286 টি উত্তর সহ উত্তরটি কার্যকর হয়নি তবে আপনার কাজটি করেছেন :)
VE7JRO

প্রদত্ত সময়সীমাটি কেবল stream_context_createসংযোগের সময়সীমা জন্য কাজ করে। সার্ভার যদি প্রদত্ত সময়সীমার মধ্যে উত্তর দেয় (কিছু তথ্য প্রেরণ করে), তবে তার বাকী পেডোলটি প্রেরণ করতে চিরকালের জন্য নেয়, এই সময়সীমা ধীর স্থানান্তরকে বাধাগ্রস্ত করে না।
z80 ক্রু

6

উল্লেখ্য যে, যদি পরিবর্তন মূল্য default_socket_timeout মাছি উপর, এটা তার মান পুনরুদ্ধার করতে আপনার পর সহায়ক হতে পারে file_get_contents কল:

$default_socket_timeout = ini_get('default_socket_timeout');
....
ini_set('default_socket_timeout', 10);
file_get_contents($url);
...
ini_set('default_socket_timeout', $default_socket_timeout);

1
তবে আপনি জানেন যে ini_set জিনিস স্থায়ীভাবে সেট করে না, তাই না? সুতরাং মূলত আপনার স্ক্রিপ্টের অর্ধেক অংশ কেবল অকেজো
ফ্ল্যাশ থান্ডার

2
@ ফ্ল্যাশথান্ডার যদি আগের কোডআউটটির প্রয়োজন পরে কোডে ফাইল_জেট_কন্টেন্টে আর কোনও কল না থাকে তবে তা নয়। কোডটি কার্যকর হওয়ার পরে নির্দিষ্ট কিছু কোডের জন্য ফ্লাইতে পুনরুদ্ধার সেটিংস পরিবর্তন করা সাধারণত উত্তম অভ্যাস।
লেইগ বিকেনেল

1
@ ফ্ল্যাশথান্ডার একটি কলের পরে সকেট_টাইমআউট মানটি পুনরুদ্ধার করা ভাল অনুশীলন যাতে ফলস্বরূপ একই স্ক্রিপ্টে একই ফাংশনে কলগুলি বিশ্বব্যাপী সেটিংস ব্যবহার করে।
পাসক্যাল রোজেট

1

আমার হোস্টে আমার php.ini পরিবর্তন করার সময় আমার জন্য কাজ করুন:

; Default timeout for socket based streams (seconds)
default_socket_timeout = 300
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.