ABA


"שאלה תאורטית בקשר ל PHP"
גירסת הדפסה        
קבוצות דיון בניית אתרים נושא #10385 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 10385
MrSus
חבר מתאריך 8.5.09
1801 הודעות
   01:49   13.12.11   
אל הפורום  
  שאלה תאורטית בקשר ל PHP  
 
   אני בא מעולם ה VBSCRIPT, עבדתי המון עם כתיבה של מאקרוים באקסל ותקשורת עם בסיסי נתונים שנוהלו באקסס. למען האמת, בפרויקטים שלי שילבתי המון אובייקטי COM מכל הסוגים...

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

האם ישנה אפשרות ב PHP לעבוד עם אובייקטי COM כדוגמת האופיס, אקספלורר, וכו'..? הכוונה שלי היא לא התממשקות עם אותם אובייקטים בצד הלקוח, אלא בצד השרת?

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

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

ידוע לי שמה שאני שואל אינו יעיל בעליל, אבל רק בקטע תאורטי האם אפשרי לעשות דבר כזה? ואני לא מדבר רק על אקסל, אלא על כל אובייקט COM שהוא.. וזה כולל דפדפני אינטרנט, adobe reader.. ועוד כל מיני תוכנות שיצא לי לעבוד איתם אבל פחות מוכרות...

תודה!
פורסם גם בפורום תיכנות


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  אם ה-PHP שלך מותקן על WINDOWS, זה בהחלט אפשרי. Ice Cold  13.12.11 09:43 1
     אכן על ווינדוס MrSus 13.12.11 10:43 2
         :) וספציפית ל-Excel, חפש קצת על PHPExcel :) Ice Cold  13.12.11 11:49 3
             חיזוק! ספרייה מדהימה לעבודה עם EXCEL! CaTz 13.12.11 22:53 4
                 קראתי עליה קצת לפני כמה חודשים MrSus 14.12.11 13:26 5
     משום מה אני לא מצליח לעבוד עם זה.. MrSus 14.12.11 13:28 6
         אתה מצפה שה-WORD ייפתח במחשב של המשתמש?? Ice Cold  14.12.11 13:55 7
             השרת רץ על המחשב שלי MrSus 14.12.11 15:13 8
                 הבנתי. גם אני ניסיתי. לא מוצג, וגם לא מצליח לעשות Ice Cold  14.12.11 15:28 9
                     הפונקציות לא השתנו MrSus 14.12.11 15:52 10
                     אוקיי הצלחתי MrSus 14.12.11 21:14 11
                         תודה רבה על השיתוף :) Ice Cold  14.12.11 22:43 12
  יש לי שאלה נוספת באותו עניין MrSus 18.12.11 20:24 13
     מכתב Deuce  23.12.11 23:36 14
         נשמע מאד מעניין MrSus 25.12.11 22:36 15

       
Ice Cold  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 3.8.02
28041 הודעות, 19 פידבק
   09:43   13.12.11   
אל הפורום  
  1. אם ה-PHP שלך מותקן על WINDOWS, זה בהחלט אפשרי.  
בתגובה להודעה מספר 0
 
דוגמא:

http://www.developerfusion.com/code/1753/accessing-com-objects-from-php/


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
MrSus
חבר מתאריך 8.5.09
1801 הודעות
   10:43   13.12.11   
אל הפורום  
  2. אכן על ווינדוס  
בתגובה להודעה מספר 1
 
   איזה יופי שאפשרי! אני חייב לבדוק את זה בהזדמנות יש לי כמה רעיונות שימושיים לזה

תודה!


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Ice Cold  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 3.8.02
28041 הודעות, 19 פידבק
   11:49   13.12.11   
אל הפורום  
  3. :) וספציפית ל-Excel, חפש קצת על PHPExcel :)  
בתגובה להודעה מספר 2
 


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
CaTz
חבר מתאריך 2.10.04
14537 הודעות
   22:53   13.12.11   
אל הפורום  
  4. חיזוק! ספרייה מדהימה לעבודה עם EXCEL!  
בתגובה להודעה מספר 3
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
MrSus
חבר מתאריך 8.5.09
1801 הודעות
   13:26   14.12.11   
אל הפורום  
  5. קראתי עליה קצת לפני כמה חודשים  
בתגובה להודעה מספר 4
 
   אחת מאד פונקציונאלית.. אבל מה שחיפשתי לא נוגע ספציפית לאקסל.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
MrSus
חבר מתאריך 8.5.09
1801 הודעות
   13:28   14.12.11   
אל הפורום  
  6. משום מה אני לא מצליח לעבוד עם זה..  
בתגובה להודעה מספר 1
 
   כתבתי רק את השורות הראשונות של הקוד, קצת להתנסות ומשום מה הוא מסוגל להציג רק את הגרסה, אבל הפקודה של ה visible לא עושה כלום.. אני לא רואה שהוא באמת פותח את הוורד במחשב.. גם ב Task Manager זה לא נראה שהוא פותח אותו.. מעניין מאיפה הוא מוציא את הגרסה אם כך.

הקוד שהשתמשתי הוא:



<?php
$word=new COM("word.application") or die("Cannot start word for you");
print "Loaded word version ($word->Version)\n";
$word->visible =1;
<?


התקנתי Wamp רק כדי להתנסות בזה, אולי זה קשור.. אבל הוא לא מציג שום שגיאה או משהו.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Ice Cold  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 3.8.02
28041 הודעות, 19 פידבק
   13:55   14.12.11   
אל הפורום  
  7. אתה מצפה שה-WORD ייפתח במחשב של המשתמש??  
בתגובה להודעה מספר 6
 
זה ממש לא יקרה... PHP לא יכול להשפיע על הפעולות של המשתמש.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
MrSus
חבר מתאריך 8.5.09
1801 הודעות
   15:13   14.12.11   
אל הפורום  
  8. השרת רץ על המחשב שלי  
בתגובה להודעה מספר 7
 
   אני גם המשתמש וגם השרת.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Ice Cold  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 3.8.02
28041 הודעות, 19 פידבק
   15:28   14.12.11   
אל הפורום  
  9. הבנתי. גם אני ניסיתי. לא מוצג, וגם לא מצליח לעשות  
בתגובה להודעה מספר 8
 
TypeText ולא SaveAs...

כנראה שב-OFFICE 2007 הפונקציות קצת שונות...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
MrSus
חבר מתאריך 8.5.09
1801 הודעות
   15:52   14.12.11   
אל הפורום  
  10. הפונקציות לא השתנו  
בתגובה להודעה מספר 9
 
   רק נוספו עוד.. אבל לי הוא כן מציג את הגרסה.. רק שהוא לא באמת פותח את הוורד...
אני אנסה לחפש יותר לעומק באינטרנט.

תודה רבה!


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
MrSus
חבר מתאריך 8.5.09
1801 הודעות
   21:14   14.12.11   
אל הפורום  
  11. אוקיי הצלחתי  
בתגובה להודעה מספר 9
 
   מסתבר שה Wamp הוא זה שגרם לבעיות.. כנראה שהוא מגדיר שם כל מיני הגדרות שמונעות התממשקות עם COM.
התקנתי מחדש בנפרד APACHE ו PHP, וזה עובד..

בעיה נוספת שעלתה זה שבגלל שאני בווינדוס 7, וה Apache מופעל כסרביס, הווינודס לא מאפשר לו לפתוח תוכנות בדסקטופ הפעיל, אז כל פעם שהוא שמופעלת תוכנה כלשהי דרך ה Apache (דרך הסרביס), אז הוא מקפיץ הודעה שצריך לאשר ורק אז הוא מעביר אותך לדסקטופ וירטואלי שבו הוא הפעיל את התוכנה.. בקיצור הפתרון (מחיפוש בגוגל) הוא להפעיל את ה APACHE בקונסול ולא כסרביס..

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Ice Cold  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 3.8.02
28041 הודעות, 19 פידבק
   22:43   14.12.11   
אל הפורום  
  12. תודה רבה על השיתוף :)  
בתגובה להודעה מספר 11
 


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
MrSus
חבר מתאריך 8.5.09
1801 הודעות
   20:24   18.12.11   
אל הפורום  
  13. יש לי שאלה נוספת באותו עניין  
בתגובה להודעה מספר 0
 
   אחרי שהצלחתי לממשק את השרת עם אובייקט ה COM, לצורך העניין אקסל, והגדרתי לו שיעשה כל מיני פעולות על הקובץ לפני שהוא מחזיר פלט.. הפעולות שהוא עושה על הקובץ לוקחות זמן (נגיד 10 שניות), איך אני עושה שמי שנכנס לאתר באותו זמן שהשרת לא זמין (הוא הרי עסוק בפעולות שהלקוח הקודם גרם לו להריץ על האקסל), יקבל הודעת "המתן" או משהו כזה? האם אפשרי שהשרת יעבד 2 פקודות במקביל?

השאלות שלי קשורות למשהו טיפה יותר גדול מאקסל, שידרוש מהשרת עבודה ארוכה יחסית (יכול להגיע גם לכמה דקות).. אני לא רוצה שיהיה מצב ש-2 לקוחות יכנסו לשרת בו זמנית ואחד יגרום לשרת לבצע משהו ולבסוף יקבל פלט, והשני ימתין בלי שיידע מה קורה.. או לחילופין - ששני הלקוחות יגרמו לשרת לבצע 2 פעולות על אותו אובייקט COM בו זמנית.. אני רוצה שהפעולות יבוצעו לפי הסדר של המשתמשים באתר, כשהמשתמש שנכנס שני יקבל הודעת "המתנה X דקות" או משהו כזה עד שהפעולה של המשתמש הראשון מסתיימת..


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Deuce 
חבר מתאריך 1.9.08
6225 הודעות
   23:36   23.12.11   
אל הפורום  
  14. מכתב  
בתגובה להודעה מספר 13
 
ראשית, עבור כל משתמש שנכנס לאתר נפתח אובייקט חדש מולו עובד המשתמש.
דהיינו, אם אני נכנס לאתר ופונה לפונקציה שמעבדת קובץ אקסל ואתה נכנס לאתר ופונה לפונקציה שמעבדת קובץ אקסל אז לכל אחד יש מחלקה משלו עם מרחב זכרון משלה (וכמובן שצריך לטפל במקרי קצה בהם אנחנו חולקים משאב משותף, לדוגמה אם שנינו כותבים לאותו קובץ).

לפעמים אתה מעוניין לחכות לעיבוד של קובץ מסום ובינתיים שהדף ייטען, או אפילו יעדכן אותך כל הזמן במצב של הקובץ. אחד הפתרונות הוא להשתמש בטרדים (אם אתה לא יודע מהם טרדים, אז תקרא על Threads; זה נושא בפני עצמו) - ואפשר להשתמש ב-php בטרדים.

לגבי כמות מסויימת של משתמשים שחולקת את אותו משאב:
כאשר אתה מתכנן מערכת שמציעה פונקציונליות לכמות גדולה של משתמשים בו זמנים, אתה צריך לחשוב כמה מהתהליכים אתה יכול למקבל או לפחות לא מהווים מבחינתך סכנה. אם למשל, עבור כל משתמש אתה מבצע פעולת חישוב שמוציאה פלט והפעולות בלתי תלויות אחת בשנייה, אז אין סיבה להסתבך. השרת יריץ את התוכנה לכל משתמש וה-context switch של המעבד/ים בשרת יחלקו את הריצות במחשב. לעמת זאת, לפעמים הפעולה כ"כ כבדה שאתה לא רוצה שתרוץ על השרת יותר מ-3/4 פעמים ואז צריך לחשוב על ארכיטקטורות שונות ומגוונות. לפעמים משתמשים בתור (יכול להיות DB, יכולה להיות תשתית MQ) ובד"כ מוסיפים עוד שרת שכל מה שהוא עושה זה לעבוד מול התור, לשלוף משימות, לבצע אותן ולהחזיר תוצאות. היום ב-WEB ניתן בצד הלקוח להאזין ל-DB ולקבל תשובות בצורה אסינכרונית.






                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
MrSus
חבר מתאריך 8.5.09
1801 הודעות
   22:36   25.12.11   
אל הפורום  
  15. נשמע מאד מעניין  
בתגובה להודעה מספר 14
 
   אני רוצה לממש את הרעיון על אובייקט COM שלא יכול להיפתח במקביל.. ולכן אני חייב לעשות שיהיה תור כך שהמשתמש הראשון ייפתח את האוביקט ובנתיים המשתמש השני יחכה לסיום הפעולה של המשתמש הראשון.. מה שהצעת לגביי תור שמנוהל ב DB יכול להיות פתרון מצוין.

בכל מקרה עד שאני אגיע למימוש מלא של הרעיון זה יהיה כנראה רק בסיום שנת הלימודים.. אבל ברמה התאורתית החכמתי! תודה רבה!


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net