سؤال

وأواجه مشاكل في استخدام الدالة fopen في بي.

إذا كنت فتح URL المطلوب باليد أحصل على:

OK,13:24:34.236 INFO [10] org.mortbay.http.SocketListener - Started SocketListener on 0.0.0.0:4443 13:24:34.236 INFO [10] org.mortbay.util.Container - Started org.mortbay.jetty.Server@52fe85 13:24:39.251 INFO [11] org.mortbay.util.Credential - Checking Resource aliases 13:24:39.251 INFO [11] org.openqa.selenium.server.SeleniumDriverResourceHandler - Command request: getNewBrowserSession[*firefox, http://dev.REPLACED.com] on session null 13:24:39.251 INFO [11] org.openqa.selenium.server.BrowserSessionFactory - creating new remote session 13:24:39.939 INFO [11] org.openqa.selenium.server.BrowserSessionFactory - Allocated session 179f69cb121941e3b45c7312664de890 for http://dev.REPLACED.com, launching... 13:24:40.048 INFO [11] org.openqa.selenium.server.browserlaunchers.FirefoxChromeLauncher - Preparing Firefox profile... 13:24:47.751 INFO [11] org.openqa.selenium.server.browserlaunchers.FirefoxChromeLauncher - Launching Firefox... 13:25:01.751 INFO [11] org.openqa.selenium.server.SeleniumDriverResourceHandler - Got result: OK,179f69cb121941e3b45c7312664de890 on session 179f69cb121941e3b45c7312664de890 13:25:01.861 INFO [18] org.openqa.selenium.server.SeleniumDriverResourceHandler - Command request: windowMaximize[, ] on session 179f69cb121941e3b45c7312664de890 13:25:03.657 INFO [18] org.openqa.selenium.server.SeleniumDriverResourceHandler - Got result: OK on session 179f69cb121941e3b45c7312664de890 13:25:04.267 INFO [11] org.openqa.selenium.server.SeleniumDriverResourceHandler - Command request: open[index.php?module=authsystem&func=logout, ] on session 179f69cb121941e3b45c7312664de890 13:25:11.064 INFO [11] org.openqa.selenium.server.SeleniumDriverResourceHandler - Got result: OK on session 179f69cb121941e3b45c7312664de890 13:25:11.673 INFO [11] org.openqa.selenium.server.SeleniumDriverResourceHandler - Command request: waitForPageToLoad[30000, ] on session 179f69cb121941e3b45c7312664de890 13:25:11.814 INFO [11] org.openqa.selenium.server.SeleniumDriverResourceHandler - Got result: OK on session 179f69cb121941e3b45c7312664de890 13:25:12.407 INFO [11] org.openqa.selenium.server.SeleniumDriverResourceHandler - Command request: type[uname4, Selenium] on session 179f69cb121941e3b45c7312664de890 13:25:12.423 INFO [11] org.openqa.selenium.server.SeleniumDriverResourceHandler - Got result: OK on session 179f69cb121941e3b45c7312664de890 13:25:13.079 INFO [11] org.openqa.selenium.server.SeleniumDriverResourceHandler - Command request: type[pass4, casetester] on session 179f69cb121941e3b45c7312664de890 13:25:13.111 INFO [11] org.openqa.selenium.server.SeleniumDriverResourceHandler - Got result: OK on session 179f69cb121941e3b45c7312664de890 13:25:13.704 INFO [11] org.openqa.selenium.server.SeleniumDriverResourceHandler - Command request: click[rememberme4, ] on session 179f69cb121941e3b45c7312664de890 13:25:13.782 INFO [11] org.openqa.selenium.server.SeleniumDriverResourceHandler - Got result: OK on session 179f69cb121941e3b45c7312664de890 13:25:14.361 INFO [11] org.openqa.selenium.server.SeleniumDriverResourceHandler - Command request: click[//input[@value='Log In'], ] on session 179f69cb121941e3b45c7312664de890 13:25:14.517 INFO [11] org.openqa.selenium.server.SeleniumDriverResourceHandler - Got result: OK on session 179f69cb121941e3b45c7312664de890 13:25:15.095 INFO [11] org.openqa.selenium.server.SeleniumDriverResourceHandler - Command request: waitForPageToLoad[30000, ] on session 179f69cb121941e3b45c7312664de890 13:25:16.001 INFO [11] org.openqa.selenium.server.SeleniumDriverResourceHandler - Got result: OK on session 179f69cb121941e3b45c7312664de890 13:25:16.642 INFO [11] org.openqa.selenium.server.SeleniumDriverResourceHandler - Command request: click[link=REPLACED, ] on session 179f69cb121941e3b45c7312664de890 13:25:16.751 INFO [11] org.openqa.selenium.server.SeleniumDriverResourceHandler - Got result: OK on session 179f69cb121941e3b45c7312664de890 13:25:17.345 INFO [11] org.openqa.selenium.server.SeleniumDriverResourceHandler - Command request: waitForPageToLoad[30000, ] on session 179f69cb121941e3b45c7312664de890 13:25:19.532 INFO [11] org.openqa.selenium.server.SeleniumDriverResourceHandler - Got result: OK on session 179f69cb121941e3b45c7312664de890 13:25:26.204 INFO [11] org.openqa.selenium.server.SeleniumDriverResourceHandler - Command request: retrieveLastRemoteControlLogs[, ] on session 179f69cb121941e3b45c7312664de890

والآن، إذا كنت فتح هذا رابط باستخدام الدالة fopen:

echo fopen($myurl, "r");

ومحتوى يتم قطع في 1330 حرف عرض ... هل هناك وجود قيود وأود أن تغيير هذا المحتوى كله أن تلقى كما هو متوقع؟

هل كانت مفيدة؟

المحلول

وأولا وقبل كل شيء:

echo fopen($myurl, "r");

ومن الواضح أن ليس هو الذهاب إلى العمل. أفترض أنك تعني:

$handle = fopen($myurl, "r");
echo(fread($handle, $some_size));
fclose($handle);

في هذه الحالة كنت أفعل ذلك الخطأ. لم يتم ضمان fread () لإرجاع كافة البيانات في مكالمة واحدة. أحيانا تحتاج إلى استدعاء عدة مرات للحصول على مدخلات كله. وهذا ينطبق بشكل خاص إذا كان ملقم HTTP عن بعد يستخدم نقل ترميز: المقسم

وfread () وثائق للحصول على مزيد من المعلومات. نقلا عن وثائق:

<اقتباس فقرة>   

عند القراءة من كل ما هو ليس ملف محلي منتظم، مثل عادت تيارات عند قراءة الملفات عن بعد أو من popen () وfsockopen ()، والقراءة تتوقف بعد حزمة متاح. وهذا يعني أنه يجب عليك جمع البيانات معا في قطع كما هو مبين في الأمثلة أدناه.

$handle = fopen("http://www.example.com/", "rb");
$contents = '';
while (!feof($handle)) {
  $contents .= fread($handle, 8192);
}
fclose($handle);

وهناك حل أسهل سيكون لاستخدام ملف _ _ الحصول على محتويات (). ولكن هذه الوظيفة يكتب الملف بأكمله في سلسلة واحدة، التي قد تكون أو لا يضر الأداء اعتمادا على ما تفعله مع مدخلات من صفحة الويب.

نصائح أخرى

وحاول تغيير الناتج التخزين المؤقت من ON إلى حجم مجموعة . على سبيل المثال

output_buffering = 4096
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top