הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   PHP | סוג של מטמון ל file_get_contents (https://hosts.co.il/forums/showthread.php?t=44169)

syn 23-04-07 14:15

PHP | סוג של מטמון ל file_get_contents
 
אני משתמש בפונקציה file_get_contents כדי להוציא פרטים מדף מסוים שלא נמצא על השרת שלי.

הכל עובד טוב, רק חבל שזה נטען הרבה מאוד זמן.
ראיתי איפשהוא שאפשר לעשות מין cache (מטמון) לפקודה.

מישהו יכול לעזור לי?

snirk 23-04-07 14:58

ומה עם ההאפשרות להוריד את הקובץ לשרת שלך ?:-0

syn 23-04-07 15:00

ציטוט:

נכתב במקור על ידי snirk (פרסם 464939)
ומה עם ההאפשרות להוריד את הקובץ לשרת שלך ?:-0

יש פקודה שאפשר להוריד איתה את הקובץ?
(הקובץ מתעדכן כל כמה שעות, אפילו דקות, אני רוצה להגדיר שיוריד לי אותו לשרת כל שעתיים).

RS324 23-04-07 15:22

עקרונית, אם תשתמש ב CURL תוכל לקצץ יותר מחצי מהזמן טעינה עבור הקובץ.

syn 23-04-07 15:40

אני מנסה להוציא את הדף הבא -
PHP קוד:

$page curl_init("http://xml.weather.yahoo.com/forecastrss?p=ISXX0007&u=c");




curl_setopt($pageCURLOPT_HEADER0);

curl_exec($page);
curl_close($page); 

הוא מחזיר לי את השגיאה הבאה -
קוד:

Warning:  curl_setopt(): supplied argument is not a valid cURL handle resource in /home/hbang/domains/galils.info/public_html/source/sidebar.php on line 445

Warning:  curl_exec(): supplied argument is not a valid cURL handle resource in /home/hbang/domains/galils.info/public_html/source/sidebar.php on line 447

Warning:  curl_close(): supplied argument is not a valid cURL handle resource in /home/hbang/domains/galils.info/public_html/source/sidebar.php on line 448


Eran-s 23-04-07 16:18

לא עובדים עם CURL ככה, תעיין כאן:
http://il.php.net/curl_init

syn 23-04-07 16:43

אוקיי, אתה יכול לעזור לי לשלב explode בתוך זה?
אני מנסה להוציא כמה שורות בלבד...

PHP קוד:

$ch curl_init();


curl_setopt($chCURLOPT_URL"http://xml.weather.yahoo.com/forecastrss?p=ISXX0007&u=c");
curl_setopt($chCURLOPT_HEADER0);


curl_exec($ch);

$lines explode("\n"$page);
for (
$i=30$i<=32$i++)
echo 
$lines[$i-1]." ";


curl_close($ch); 

קודם שמתי את הפונקציה במשתנה $page והכל עבד פיקס,
עכשיו אני לא יודע איזה מהם לשים במשתנה.

Eran-s 23-04-07 19:07

איזה ערך אתה רוצה להוציא?

syn 23-04-07 19:14

ציטוט:

נכתב במקור על ידי Eran-s (פרסם 465169)
איזה ערך אתה רוצה להוציא?

אני רוצה להציג את השורות 30, 31 ו32.
כשזה היה עם file_get_contents, שמתי אותו במשתנה $page ואז הכל היה פיקס.

Meir 23-04-07 19:19

בגלל שאתה לא מפעיל את הcurl לא פועל לך תוסיף את השורות האלו:

PHP קוד:

curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
$page curl_exec($curl); 


syn 23-04-07 19:37

ציטוט:

נכתב במקור על ידי elbaz.maor (פרסם 465192)
בגלל שאתה לא מפעיל את הcurl לא פועל לך תוסיף את השורות האלו:

PHP קוד:

curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
$page curl_exec($curl); 


B-)
תודה רבה! זה עובד.

(חבל שזמן הטעינה נשאר בדיוק אותו הדבר :()

Eran-s 23-04-07 22:16

תעשה explode לפי הביטוי </description>

syn 23-04-07 23:46

ציטוט:

נכתב במקור על ידי Eran-s (פרסם 465243)
תעשה explode לפי הביטוי </description>

לא מציג לי כלום.
|דמעות| זה עדיין איטי כמו שהיה.

Eran-s 24-04-07 00:47

ציטוט:

נכתב במקור על ידי syn (פרסם 465281)
לא מציג לי כלום.
|דמעות| זה עדיין איטי כמו שהיה.

אם אתה עושה explode, זה לא מפחית מהירות, זה מאט אפילו.
הוא בכל זאת לוקח את כל המידע מהשרת ההוא וה-explode מעמיס עוד יותר.
אני רואה בכל שאלה שלך כאן שצריך להפנות אותך ישירות לדף הסברים באתר php.net
תנסה בעצמך, תרשום שם פונקציה לאחר www.php.net/ למשל www.php.net/explode
ותשים לב שהפונקציה שלעיל מחזירה מערך...

syn 24-04-07 00:55

ציטוט:

נכתב במקור על ידי Eran-s (פרסם 465302)
אם אתה עושה explode, זה לא מפחית מהירות, זה מאט אפילו.
הוא בכל זאת לוקח את כל המידע מהשרת ההוא וה-explode מעמיס עוד יותר.
אני רואה בכל שאלה שלך כאן שצריך להפנות אותך ישירות לדף הסברים באתר php.net
תנסה בעצמך, תרשום שם פונקציה לאחר www.php.net/ למשל www.php.net/explode
ותשים לב שהפונקציה שלעיל מחזירה מערך...

התפקיד של explode זה "לפצל", לא?
איפה שיש " ", הוא מחלק את זה לחלקים שונים?

הייתי כבר בדף ההסברים הזה, כל פקודה שמביאים לי כאן, אני בודק באתר.
אגב, גם בלי explode זמן הטעינה הוא ארוך.

Eran-s 24-04-07 01:06

ציטוט:

נכתב במקור על ידי syn (פרסם 465306)
התפקיד של explode זה "לפצל", לא?
איפה שיש " ", הוא מחלק את זה לחלקים שונים?

הייתי כבר בדף ההסברים הזה, כל פקודה שמביאים לי כאן, אני בודק באתר.
אגב, גם בלי explode זמן הטעינה הוא ארוך.

כי הוא מתקשר עם שרת אחר ומעבד ממנו מידע,
אין דרך לקצר את הטעינה הארוכה, גם אם שתי השרתים חזקים ביותר תהיה טעינה יותר איטית מדף רגיל בשרת שלך.

רצית לפצל את המידע ולקחת מספר שורות, והשורות הללו יותר בתוך <description></description>
אז תפצל לפי זה ואז תעשה למערך שנוצר print_r() כדי לראות באיזה מספר תא נמצא הערך שלך ותמשיך לשחק עם זה...

syn 24-04-07 01:11

אההה, עכשיו הבנתי למה אתה מתכוון.
אבל איך אני יכול להוציא את מה שנמצא בין description?
זה מתחיל עם <description> ונגמר עם </description>.

Eran-s 24-04-07 01:19

תראה, יש המון דרכים. אם זה תמיד נשאר בשורות שאתה צריך תקח את המידע בצורה הזו:
PHP קוד:

$file file("http://xml.weather.yahoo.com/forecastrss?p=ISXX0007&u=c");
$line30 $file[30];
$line31 $file[31];
$line32 $file[32]; 


syn 24-04-07 01:32

בכל מקרה זה אותו הדבר :(
יש איזה סקריפט מוכן של הדבר שאני מחפש -
http://www.2send.us/uploads/35a9111469.zip

הבעיה שאני לא רוצה להשתמש בזה כי אני לא יודע מה אני עושה.
אתה יכול לעבור על זה מהר ולראות במה הם משתמשים שם? (אני לא הבנתי שום דבר בגרוש).

Eran-s 24-04-07 01:39

הם ניתחו XML בעזרת פונקציות מובנות ב-PHP,
http://ch2.php.net/xml

בכל אופן אם בשביל כמה שורות קצרות אני ממליץ על הדרך הקודמת.
לי היא עלתה במהירות כשהרצתי, והדפיס את הערכים המתאימים.

בניה 24-04-07 08:38

תעשה מטמון בעצמך.
תשמור את הקובץ במסד נתונים, וגם את הזמן האחרון שהוא נשמר שמה.
ואם שעתיים עברו מאז הפעם האחרונה שהורדתה אותו, תוריד אותו מחדש.

Tomer 24-04-07 12:23

תשתמש ב regular expression בשביל למשוך <description></description> וזהו ..

PHP קוד:

$p preg_match_all('/<description>(.*)<\/description>/',$html-source,$ary);
print_r($ary); 

אמור לעבוד

syn 24-04-07 15:25

אוקיי תודה לכולם, אבל זמן הטעינה נשאר אותו הדבר, לא משנה מה אני עושה.
בניה, עם איזה פקודה אני יכול להוריד קובץ לשרת?

בניה 24-04-07 16:39

אתה יכול לקחת את התוכן שלו, ולשמור או במסד נתונים, או ליצור קובץ חדש עם FOPEN ולשמור את התוכן של מה שהורדת שמה.

syn 24-04-07 16:55

|קורץ|
תודה בניה, לא חשבתי על זה :)

אתה יכול לתת לי רעיון מה לעשות עם הזמנים?
אני לא מצליח לחשוב על כלום,
בהתחלה עשיתי אם השעה קטנה מ 17 אז תעדכן, אם לא פשוט תדפיס מה שכבר קיים,
שחכתי שזה יעדכן כל הזמן עד השעה 17 :(

בינתיים אני עובד עם sessions, אבל אני מעדיף שזה יעדכן כל 5 שעות בערך.

בניה 24-04-07 17:11

אם אתה שומר במסד נתונים, תעשה עם זה תא שתקרא לו lasttime ותכניס לתוכו
את הערך של הפונקציה time()
אם בקובץ, תשמור את זה בקובץ נפרד, או בצורה שנוחה לך.
ואם אתה רוצה שזה יתעדכן כל שעתיים
תעשה בדיקה אם הlasttime + 7200 שווה או גדול. מה time() של עכשיו.
אם כן, תעדכן את המידע(ואל תשכח לעדכן גם את ה lasttime)

ואז תציג את המידע.

syn 24-04-07 17:52

תודה, הסתדרתי.

syn 24-04-07 22:21

בסוף הלכתי על השיטה שערן הציע לי, הקטע עם השורות.
אני מכניס רק את שלושת השורות שאני צריך לקובץ, ומדפיס אותם.

עשיתי עוגיה שתמחק אחרי 5 שעות, בתנאי שיש עוגיה, להדפיס את התוכן בקובץ, else, להכניס את התוכן של העמוד לתוך הקובץ.

ככה שגם אם הדף מתעדכן כל חצי שעה, הוא יתעדכן אצלי גם, כי כל גולש שנכנס פעם ב5 שעות מעדכן את הקובץ :).

סליחה על הדאבל, אי אפשר לערוך את ההודעה הראשונה.


כל הזמנים הם GMT +2. הזמן כעת הוא 03:12.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ