ดึงข้อมูลมาแสดง แต่โหลดนานมากครับ ทำอย่างไรดี php

เริ่มโดย TopPopWeb, 12 มกราคม 2014, 20:06:00

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

TopPopWeb

ผมหาสคริปดึงข้อมูลมา ด้วยความรู้อันน้อยนิดเหมือนหางอึ่งผมลองผิดลองถูก พอรันได้แล้วแต่มีปัญหาครับ คือว่ามันโหลดนานจัดจน firefox ค้าเลย ไม่ทราบว่าผมต้องแก้ไขอะไรดีครับ รบกวนพี่ๆ ช่วยหน่อยนะครับ

โค๊ดเป็นแบบนี้
<?php
function getTitle($url){
    @
$str file_get_contents($url); // suppressing the warning

    
if(strlen($str)>0){
preg_match('/<div id="productTitle">(.*?)<\/div>/s',$str,$title);
        return 
$title[1];
    } else {
        return 
false;
    }
}


$urls = array(
'http://www.zales.com/product/index.jsp?productId=12268400&page=1&fd=Under+%2450&fv=00000000%7E-%7E00004999&kpc=1&ff=StorePrice'
//ลิงค์ตรงนี้มี 1000 บรรทัดแต่ผมตัดออก เนื่องจากมีปริมาณตัวอักษรมากเกินไปไม่สามารถโพสต์ลงกระทู้ได้ครับ
'http://www.zales.com/product/index.jsp?productId=2975976&page=5&fd=Under+%2450&fv=00000000%7E-%7E00004999&kpc=1&ff=StorePrice'
);

foreach(
$urls as $url)
{
    
$title getTitle($url);
    if(
$title === false)
    {
        continue;
    }
echo '<br>';

$use substr($title,0,42);

echo $use;

 } 
 
?>


ขอบคุณล่วงหน้าครับ
 *Link Removed*

max30012540


TopPopWeb

อ้างถึงจาก: max30012540 ใน 12 มกราคม 2014, 20:19:40
ผมว่ามันช้ามาจากเว็บต้นทางนะครับ :wanwan023:

ขอบคุณครับคุณ max30012540  :wanwan017:
ถ้าข้อมูลช้ามาจากต้นทาง แสดงว่าอาจจะแก้ไขไม่ได้หรอครับ
 *Link Removed*

SL_master

ดูจากโค้ดไม่มีอะไรหนัก ไม่มีอะไรloop
ต้นทางชัวร์ครับ

หรือ เป็นไปได้มั้ยว่ามาจากส่วนอื่น ที่ include หรือ ทำอะไรก่อนหน้านี้
แต่ถ้า โค้ดที่ให้มา คือทั้งหน้าแล้ว ก็ทางเดียวคือ ต้นทางจริงๆครับ

คำตอบคือทำอะไรไม่ได้ นอกจาก โทรไปแจ้งเค้า ว่ามีปัญหา
[direct=http://www.ifcg.co.th]ที่ปรึกษาการเงิน[/direct]
[direct=http://www.ifcg.co.th]วางแผนการเงิน[/direct]

TopPopWeb

อ้างถึงจาก: SL_master ใน 12 มกราคม 2014, 21:31:27
ดูจากโค้ดไม่มีอะไรหนัก ไม่มีอะไรloop
ต้นทางชัวร์ครับ

หรือ เป็นไปได้มั้ยว่ามาจากส่วนอื่น ที่ include หรือ ทำอะไรก่อนหน้านี้
แต่ถ้า โค้ดที่ให้มา คือทั้งหน้าแล้ว ก็ทางเดียวคือ ต้นทางจริงๆครับ

คำตอบคือทำอะไรไม่ได้ นอกจาก โทรไปแจ้งเค้า ว่ามีปัญหา

code มีเท่าที่มาให้ดูแค่นั้นครับ สงสัยจะทำอะไรไม่ได้จริงๆ
ขอบคุณมากครับคุณ SL_master ที่ช่วยให้หายสงสัย :wanwan017:
 *Link Removed*

pgzz

$urls เก็บ  1000 ผมว่ามันก็เยอะนะ กว่าจะ  file_get_contents  มาหมดแต่ละ url
ลองลด ค่าที่อยู่ใน $urls ทำทีละ 50 หรือ 100 ก็ได้ครับ ลองดู..


tarza

ลองทำ ทำ Cache ครับ
เนื่องจากการดึงข้อมูลแต่ละครั้งจำเป็นจะต้องดึงข้อมูลจากในอินเทอร์เน็ต
เซิฟเวอร์อื่น ซึ่งก็ไม่รู้ว่าเซิฟเวอร์เค้า ทำงานหนัก หรือ ไม่หนักเพียงใด
ดังนั้นเพื่อให้หน้าเว็บเราไม่ช้าไปตามเซิฟเวอร์เค้า เราจะเขียน Backend หรือไม่ก็ให้ดึงข้อมูลเป็นระยะ ๆ หากมีการอัพเดทข่าว ค่อยดึงมาก็พอไม่ต้องดึงข้อมูลมาตลอด หรือทำ Cache
เพื่อเก็บข้อมูลมาเป็นระยะ ๆ

Unlocker

ลองกำหนด timeout ให้ฟังชั่น file_get_contents ดูครับ

ini_set('default_socket_timeout', 10); //10วินาที ถ้าโหลดนานกว่านั้น จะหยุดการทำงาน

[direct=https://drive9x.com]FREE! ระบบ Google Drive Proxy ที่เจ๋งที่สุด[/direct]
hostalternative [direct=https://www.hostalternative.com]vpsสำหรับเว็บสายโหดสายดาร์ก คนเข้าเกิน100k จูนให้ฟรี ลื่นหัวแตก[/direct]
รับจูน VPS/Server ประสบการณ์10ปี+

x-script

เปนผมนะ คุณดึงได้แล้วใช่มะ ก็ดึงมาเกบไว้ในdbคุณเลยดิ แล้ว เวลาใช้งานก็ดึงจาก dbมา

TopPopWeb

อ้างถึงจาก: tarza ใน 12 มกราคม 2014, 22:00:09
ลองทำ ทำ Cache ครับ
เนื่องจากการดึงข้อมูลแต่ละครั้งจำเป็นจะต้องดึงข้อมูลจากในอินเทอร์เน็ต
เซิฟเวอร์อื่น ซึ่งก็ไม่รู้ว่าเซิฟเวอร์เค้า ทำงานหนัก หรือ ไม่หนักเพียงใด
ดังนั้นเพื่อให้หน้าเว็บเราไม่ช้าไปตามเซิฟเวอร์เค้า เราจะเขียน Backend หรือไม่ก็ให้ดึงข้อมูลเป็นระยะ ๆ หากมีการอัพเดทข่าว ค่อยดึงมาก็พอไม่ต้องดึงข้อมูลมาตลอด หรือทำ Cache
เพื่อเก็บข้อมูลมาเป็นระยะ ๆ

ขอบคุณครับสำหรับข้อมูลที่มีประโยชน์ แต่ผมลองค้นหาวิธีทำดูแล้วคงเกินความสามารถของผม อิๆ
 *Link Removed*

TopPopWeb

ขอบคุณมากสำหรับทุกคำตอบครับ  :wanwan017:

ตอนนี้ผมใช้วิธีที่คุณ pgzz บอกครับคือแบ่งทีละ 100 แทน
 *Link Removed*

zidit

ถ้าเปนผม ผมจะเกบ url ไว้ใน db หรือ txt file แล้วเรียกเอาตามจำนวนที่ต้องการ ส่วนใหญ่ ผมจะเรียกทีละ 1 แล้วตั้ง cron เอาครับ ให้มันเรียกตลอด เช่นนาทีละครั้ง มันก็จะไม่หนักไป วันนึงก็ได้ 1440 แต่อาจจะช้าหน่อย

~บอล~

อ้างถึงจาก: zidit ใน 13 มกราคม 2014, 07:54:51
ถ้าเปนผม ผมจะเกบ url ไว้ใน db หรือ txt file แล้วเรียกเอาตามจำนวนที่ต้องการ ส่วนใหญ่ ผมจะเรียกทีละ 1 แล้วตั้ง cron เอาครับ ให้มันเรียกตลอด เช่นนาทีละครั้ง มันก็จะไม่หนักไป วันนึงก็ได้ 1440 แต่อาจจะช้าหน่อย

ตามคุณ zidit ว่าเลยครับ

TopPopWeb

อ้างถึงจาก: zidit ใน 13 มกราคม 2014, 07:54:51
ถ้าเปนผม ผมจะเกบ url ไว้ใน db หรือ txt file แล้วเรียกเอาตามจำนวนที่ต้องการ ส่วนใหญ่ ผมจะเรียกทีละ 1 แล้วตั้ง cron เอาครับ ให้มันเรียกตลอด เช่นนาทีละครั้ง มันก็จะไม่หนักไป วันนึงก็ได้ 1440 แต่อาจจะช้าหน่อย

ขอบคุณครับสำหรับแนวทาง  :wanwan017: แต่ผมลืมบอกไปว่าข้อมูลที่ดึงมาอาจเปลี่ยนแปลงได้ตลอดเวลานะครับ อาจจะเก็บใน db ไม่ได้ครับ
 *Link Removed*