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

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

בניה 15-12-06 12:20

פונקצית PHP נחמדה: eval
 
http://www.php.net/manual/en/function.eval.php
הפונקציה הזו מריצה קוד PHP שאתם שולחים אליה כמחרוזת.
למשל אם תכתבו את הקוד הזה:
קוד:

eval("echo 'eval';");
הפלט בדף יהיה eval

x-ray 15-12-06 12:32

מתי זה מועיל?

WebProject 15-12-06 12:36

זה דווקא לפעמים די עוזר :) פונקציה נחמדה :]

RS324 15-12-06 12:37

ציטוט:

נכתב במקור על ידי x-ray (פרסם 388765)
מתי זה מועיל?

לדוגמא :

PHP קוד:

function print_template($templatename)
{
    echo 
"templatename is $templatename";
    print 
file_get_contents("$templatename.tpl");
}

eval(
"print_template('mytemplate')"); 


meshuga 15-12-06 13:09

פעם ראשונה שאתה מגלה אותה?
מוכרת דווקא....יש אותה גם בJAVASCRIPT.....

Eli-Hai 15-12-06 19:45

עדיין לא הבנתי מה היעילות שלה?

בניה 16-12-06 19:22

ציטוט:

נכתב במקור על ידי meshuga (פרסם 388799)
פעם ראשונה שאתה מגלה אותה?
מוכרת דווקא....יש אותה גם בJAVASCRIPT.....

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

tnadav 18-12-06 21:06

ציטוט:

נכתב במקור על ידי RS324 (פרסם 388774)
לדוגמא :

PHP קוד:

function print_template($templatename)
{
    echo 
"templatename is $templatename";
    print 
file_get_contents("$templatename.tpl");
}

eval(
"print_template('mytemplate')"); 


מה ההבדל בין זה ל-
PHP קוד:

function print_template($templatename)
{
    echo 
"templatename is $templatename";
    print 
file_get_contents("$templatename.tpl");
}
print_template('mytemplate'); 

?

drowkid 18-12-06 21:17

לדעתי הדבר שזה הכי עוזר בוא זה לישם קוד PHP שניקלט מה in-put...



חג חנוכה שמח לכולם :)

Art Watch 18-12-06 21:37

הדבר הכי מוזר שראיתי. אני אמנם מכיר את הפונקציה אבל ממש ממש לא משתמש בה - לדעתי אחת הפחות שימושיות שקיימות.

LosNir 18-12-06 21:45

דווקא מאוד שימושי,
אם יש לך קוד PHP שמאוחסן במסד, אז אי אפשר לעשות ככה:

PHP קוד:

$query mysql_query("SELECT * FROM table WHERE id=1");
$a mysql_fetch_array($query);
$a[code]; 

אז עושים ככה:

PHP קוד:

$query mysql_query("SELECT * FROM table WHERE id=1");
$a mysql_fetch_array($query);
eval(
$a[code]); 


tnadav 18-12-06 21:49

ציטוט:

נכתב במקור על ידי LosNir (פרסם 390564)
דווקא מאוד שימושי,
אם יש לך קוד PHP שמאוחסן במסד, אז אי אפשר לעשות ככה:

PHP קוד:

$query mysql_query("SELECT * FROM table WHERE id=1");
$a mysql_fetch_array($query);
$a[code]; 

אז עושים ככה:

PHP קוד:

$query mysql_query("SELECT * FROM table WHERE id=1");
$a mysql_fetch_array($query);
eval(
$a[code]); 


יכול להיות חור אבטחה פוטנציאלי...

רומן 18-12-06 22:13

למה שמישהו ישמור קוד php במסד, אני ממש בספק, פונקציה מוזרה.

LosNir 18-12-06 23:41

ציטוט:

נכתב במקור על ידי tnadav (פרסם 390569)
יכול להיות חור אבטחה פוטנציאלי...

איך בדיוק חור אבטחה,
אתה לא יכול להגדיר את המשתנה $a...

ולרומן, לך תדע |קורץ|

Tomer 18-12-06 23:44

ציטוט:

נכתב במקור על ידי LosNir (פרסם 390597)
איך בדיוק חור אבטחה,
אתה לא יכול להגדיר את המשתנה $a...

ולרומן, לך תדע |קורץ|

מישהו שמכניס לך למסד פקודת system למשל (במידה ו Safe mode OFF)

RS324 18-12-06 23:56

ציטוט:

נכתב במקור על ידי רומן (פרסם 390577)
למה שמישהו ישמור קוד php במסד, אני ממש בספק, פונקציה מוזרה.

אתם יודעים שלפחות 50% מהמערכת של VBULLETIN מתבססת על הפונקציה הזאת ?

כל מערכת HOOKS של VB עובדת על EVAL וגם המערכת של הטמפלטים

למי שאמר שזאת אחת הפונקציות הפחות שימושיות - זה רק מראה כמה באמת אתה יודע על PHP

ל TNADAV

תחשוב שבמסד אני מכניס קובץ כזה

שהוא בעצם הטמפלט שלי....
PHP קוד:

<html>
<
title>$pagetitle</title>
<
body onload="$onload">

<
divmy username is $userinfo[username]</div>

</
body>
</
html

ובקובץ PHP אני עושה משהו כזה..

PHP קוד:

<?php

$pagetitle 
'my fucking nice page';
$sitename 'my site';
 
if (
$userid)
{
    
//get user info
    
$userinfo get_userinfo($userid);
}
else 
{
    
$userinfo = array(
    
'userid' =>0,
    
'username' =>'Guest',
    
'lastvisit' =>'Never',
    );
}

$onload "alert('Welcome to $sitename');";

require_once(
'db.php');

$temp mysql_fetch_assoc(mysql_query("SELECT text FROM template WHERE templatename='index'"));


eval(
"print ".$temp[text].";");


?>

עכשיו... אם הייתי עושה
PHP קוד:

print $temp[text

לבד אז הייתי מקבל את הקובץ של ה HTML איך שכתבתי אותו למעלה...

אבל ה EVAL הופך את כל הערכים לממשיים ומחליף אותם במה שמוגדר בתוך הדף של ה PHP


עוד דוגמאות לשימושים בפונקציה ה"מיותרת" הזאת ?

LosNir 18-12-06 23:58

אז זה לא נקרא חור אבטחה....
זה אפשרי למי שיש גישה למסד \=

זה כמו שתגיד שהתחברות זה חור אבטחה, הוא יוכל לגלות את הפרטים :S

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

חוץ מזה שזה אפשרי לשימוש במערכתו ניהול תוכן לדוגמא,
שמי "ששולט" על המסד הוא בעל האתר, ואני לא מאמין שבעל אתר יהרוס לעצמו את המערכת :D

ו RS324 צודק,
יכול להיות שבעתיד אשלב למערכת שלי ניהול סקינים ע"י קובץ טמפלט ב PHP.

ViPeRt 19-12-06 00:12

כמו שאמרו פה, זה שימושי למערכת טמפלטים - הכי נוח :]

tnadav 19-12-06 12:14

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


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

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