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

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

dor77 04-04-14 20:19

Sleep ב PHP
 
שלום.
אני מעוניין שתעשה פעולה כל 5 דקות.
יש לי דף שנקרא abc.php ושם נמצאת הפעולה.
את הדף הזה אני מכליל כל 5 דקות בדף שנקרא test.php, אני מעוניין שאבצע כניסה ל test.php ומאותו רגע הפעולה שבדף abc תתבצע כל 5 דקות 3 פעמים, כלומר תתבצע ברגע הכניסה, לאחר 5 דקות תתבצע שוב ולאחר 5 דקות תתבצע שוב, כלומר 3 פעמים ברבע שעה לצורך הדוגמא.

PHP קוד:


<?php
include('abc.php');
sleep(300);
include(
'abc.php');
sleep(300);
include(
'abc.php');
?>

משום מה הפעולה מתרחשת רק בפעם הראשונה..לצורך העניין מה שיש ב abc.php זה למשל פקודת mail שתשלח אימייל מן הסתם.

מדוע?
אולי הדף "מת" אחרי דקה, שתיים, 4?
אשמח לעזרה..

תודה.

אדיר 04-04-14 20:34

תגדיר פונקציה ותריץ אותה בלולאה - אחרי כל ריצה הלולאה תחכה X זמן ותרוץ שוב, עד 3 פעמים.
בנוסף, תבטל את מגבלת זמן הריצה של הסקריפט: http://davidwalsh.name/increase-php-...-limit-ini_set

בכל אופן - מה אתה עושה ולמה? זה נשמע קצת עקום.
אפשר להעביר את זה ל- cron job?

GNS 04-04-14 21:45

cron jobs...

dor77 04-04-14 22:24

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

הסתדרתי תודה רבה בכל אופן!

zoharesh 05-04-14 03:42

בקשר לבעיה שלך, שים את הגדרת הפונקציה בתנאי
PHP קוד:

if(!function_exists(...)) 

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

dor77 05-04-14 04:03

מסד? למה?
אני צריך שאני אכנס לדף, הדף ישאר פתוח ויבצע פונקציה כלשהי כל 5 דקות במשך 15 דקות כלומר 3 פעמים.
אני אצטרך לשלוף את השדה של ה5 דקות בכל שנייה..
במה זה עדיף על sleep?

תודה.

Haimz 05-04-14 09:38

ממליץ להשתמש בCRON JOBS
או להשתמש בjquery בצורה הבאה:
קוד:

$(function() {
        $.get( "abc.php" ); // קובץ ראשון
       
        setTimeout(function() {
       
                $.get( "abc-2.php" ); // קובץ שני אחרי 5 דקות
               
                setTimeout(function() {
                        $.get( "abc-2.php" ); // קובץ שלישי אחרי עשר דקות מהתחלה
                }, 300000);
               
        }, 300000);
});

לא בדקתי אבל זה אמור לעבוד לדעתי..

אדיר 05-04-14 11:16

לפי התיאור שלך עד כה: אתה לא צריך מסד-נתונים, cron job לא מתאים לך והעברת התזמון לצד-הלקוח לא בהכרח יהיה נכון.
מסתמן שהפתרון עם sleep זה באמת הפתרון המתאים, אבל אתה מבקש פתרון לפתרון, במקום פתרון לבעיה - אז אנחנו יכולים רק לנחש.

גם עכשיו, אמרת שפתרת את זה, לא אמרת איך - לעשות 3 includes זה גרוע, בדיוק בשביל זה קיימות לולאות.

dor77 05-04-14 11:47

בדיוק, עשיתי לולאה, אבל זה לא עובד משהו..
עכשיו הוספתי
PHP קוד:

 ini_set('max_execution_time'780); 

ואני בוחן איך זה עובד..
העניין הוא שכרגע אני מאוחסן בסתם שרת חינמי (שוב זה לכמה ימים בלבד)..אתם חושבים שתהיה להם בעיה עם הפקודה הזו? זה משהו שהם פחות אוהבים? זה יכול לגרום לבעיות?

תודה.

עריכה: גם עם max_execution_time זה לא עובד (הוספתי את זה ממש בפתיחת הדף, מתחת ל <?php).
כאילו 5 דקות זה יותר מדי זמן.
לא מבין מה קורה פה..זה אמור לעבוד.

Ori The Man 05-04-14 12:27

אני מאמין שהם לא יתנו לך לבצע את הפקודה הזאת.
רוב השירותים החינמיים חוסמים את האפשרות לשנות את ההגדרות דרך הקובץ.
ולהשתמש ב sleep \ ב long polling על שרת חינמי לא נראה לי ממש אופציה (יותר מזה, בשימוש ב long polling תצתרך להשאיר את הדפדפן פתוח), וב sleep זה יטחן את השרת..

אין לך ברירה של cron job ואם אין לך, תנסה למצוא מישהו שיש לו, שיעשה שכל 5 דקות זה יגש לקובץ בשרת שלך (אתה פשוט יכול להגדיר כתובת שהוא יגש אילו כל פעם ויריץ אותו)


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

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