Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

URGENT, vision_to_exe function

Posted on 2006-07-16
24
Medium Priority
?
277 Views
Last Modified: 2012-06-21
I have developed a function to let call, execute php functions within the text content ...
The problem is i can use it or call it just once, if i call it two or more times it doesn't work ...
<?
//======================================================
    function VISION_TO_EXE ($function_name = "", $sender = "")
    {
    // by www.vision.to 
    //ini_set('display_errors', '0');
    $result = true;
/*
You can use this to filter what functions can be executed ...
if(eregi("vision_to",$function_name) && 
$function_name && function_exists($function_name) &&
 strtolower($function_name) != "vision_to_exe")
*/
    //{
    if($function_name && function_exists($function_name) && strtoupper($function_name) != "VISION_TO_EXE")
    {
    //if(is_array($sender))
    if(isset($sender))
    {
    $result = call_user_func_array($function_name, array($sender));
    }
    else
    {
    $result = call_user_func($function_name);        
    }
    //ini_set('display_errors', '1');
    return $result;
    }
    else
    {
    return "<span style=\"color:#ff0000;\"> Vision.To CMS :Error :Function :
<strong>".$function_name."</strong> Does not exist or is not allowed! </span>";
    }
    //ini_set('display_errors', '1');  
    }
//Usage: $output = preg_replace("/[exe=([^>]*)]([^>]*)[/exe]/mie","''.VISION_TO_EXE('$1','$2').''",$output);
//======================================================
?>

I thin the problem is in :
$output = preg_replace("/[exe=([^>]*)]([^>]*)[/exe]/mie","''.VISION_TO_EXE('$1','$2').''",$output);

more info:
http://www.vision.to/CMS/Home/index.php?pid=276 
Sorry these are my last points, i have to earn more :-(

This question should be in PHP ...

0
Comment
Question by:feha
  • 14
  • 10
24 Comments
 
LVL 17

Expert Comment

by:BogoJoker
ID: 17119502
Try escaping open and closing brackets in your Regex.
"/\[exe=([^>]*)\]([^>]*)\[/exe\]/mie"

Also may I ask why your code between [exe] and [/exe] can be any character but > symbol?
You could change [^>] to allow [a-z0-9,_ ] letters, numbers, spaces, commas, and underscores.

Joe P
0
 
LVL 17

Expert Comment

by:BogoJoker
ID: 17119516
Also make sure that you are not too greedy with the [^>]*  That means that even a bracket is included in that so if you had:

[exe]param1, param2[/exe] blah blah [exe]param1, param2, param3[/exe]
You might be replacing ALL OF IT if the regex is too greedy.

To modify yours I would do this:
"/\[exe=([^>]*)?\]([^>]*)?\[/exe\]/mie"
Mine would not need that modification since when a bracket appears it breaks out of the a-z0-9,_ requirements:
"/\[exe=([a-z0-9,_ ]*)\]([a-z0-9,_ ]*)\[/exe\]/mie"
0
 
LVL 2

Author Comment

by:feha
ID: 17120418
Hi Joe P and BogoJoker, thank you,
your both ansers are right ...

[exe=function_name](parameters)[/exe]

how could i modify regex to use it this way ?
0
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

 
LVL 2

Author Comment

by:feha
ID: 17120458
I tried "/\[exe=([a-z0-9,_ ]*)\]([a-z0-9,_ ]*)\[/exe\]/mie" but i get this error:
Warning: preg_replace(): Unknown modifier '\' in c:\inetpub\wwwroot\php4\CMS_UNIVERSE\Functions\bbcode_func.php on line 96

thats the line for regex
0
 
LVL 2

Author Comment

by:feha
ID: 17120529
remmoved the error
$content = preg_replace("/\[exe=([a-z0-9,_ ]*)\]([a-z0-9,_ ]*)\[\/exe\]/mie","''.VISION_TO_EXE('$1','$2').''",$content);

but this does not work ...
0
 
LVL 2

Author Comment

by:feha
ID: 17121445
I mean it does not work at all ...
0
 
LVL 17

Expert Comment

by:BogoJoker
ID: 17124920
Could you show an example of what $content is?  Maybe echo $content; and paste the result here.
I noticed that I forgot to escape the / in /exe, you fixed the problem on your own. =)
Also did you try keeping the [^>]?

Joe P (I am BogoJoker) =)
0
 
LVL 2

Author Comment

by:feha
ID: 17126110
this is what i use now:
$content = preg_replace("/\[exe=([a-z0-9,_ ]*)\]([a-z0-9,_ ]*)\[\/exe\]/mie","''.VISION_TO_EXE('$1','$2').''",$content);

and content to be parsed:

Executing the functions from content:
[code]
Some text here ....
[exe =my_function_name]parameter1,prameter2,parameter3[/ exe]
Another text here ...
[/code]
LIVE TEST:
[code]  [exe =date]Y-m-d[/ exe] [/code]
Date : [exe=date]Y-m-d[/exe]

Problems:
This function can only be called once from the same content.
If you have any idea why, please use this comment's section.
Thank You

This is not parsing at all ...
see result at the bottom of content
http://www.vision.to/CMS/Home/index.php?pid=276

Date : [exe=date]Y-m-d[/exe]
Should echo date ... id does with my orignal regex ...


0
 
LVL 17

Expert Comment

by:BogoJoker
ID: 17126866
Oh. well Then try this:
$content = preg_replace("/\[exe=([^\]])*\]([^\]]*)\[\/exe\]/mie","''.VISION_TO_EXE('$1','$2').''",$content);

That matches both [exe] blocks in this:

[code]  [exe=date]Y-m-d[/exe] [/code]
Date : [exe=date]Y-m-d[/exe]

Notice that you cannot have a space between exe and = but you can have spaces after the =.  Also same with [/ exe] should have no spaces.

Also sorry it took so long for me to post this.  I had this code about 2 hours ago but I lost Wireless Internet Temporarily.
Joe P
0
 
LVL 2

Author Comment

by:feha
ID: 17126884
[code]  [exe =date]Y-m-d[/ exe] [/code]

there are spaces just to show code not to execute :-)
in order to present code i must make some solution
example putting [code]  [exe*=date]Y-m-d[/*exe] [/code] than replace them with '' :-)
0
 
LVL 2

Author Comment

by:feha
ID: 17126899
$output = preg_replace("/[exe=([^>]*)]([^>]*)[/exe]/mie","''.VISION_TO_EXE('$1','$2').''",$output);

gives Date : Vision.To CMS :Error :Function : e Does not exist or is not allowed!

0
 
LVL 17

Expert Comment

by:BogoJoker
ID: 17126907
Well yes that should fail.  Because that one does not have the ? marks.

1) $output = preg_replace("/[exe=([^>]*?)]([^>]*?)[/exe]/mie","''.VISION_TO_EXE('$1','$2').''",$output);
should work.  (as long as the name or the params dont have the '>' symbol)

2) $output = preg_replace("/\[exe=([^\]])*\]([^\]]*)\[\/exe\]/mie","''.VISION_TO_EXE('$1','$2').''",$content);
should work.

Joe P
0
 
LVL 17

Expert Comment

by:BogoJoker
ID: 17126914
Correction to number 1, I copied and Pasted what you wrote which had other bugs:
1) $output = preg_replace("/\[exe=([^>]*?)\]([^>]*?)\[\/exe\]/mie","''.VISION_TO_EXE('$1','$2').''",$output);
0
 
LVL 2

Author Comment

by:feha
ID: 17126987
Sorry none of them works , no parsing ...
0
 
LVL 17

Expert Comment

by:BogoJoker
ID: 17127006
Hmm.  Then I really have no idea.  In My regex tester it matches the blocks of [exe] perfectly.  I really don't know why it doesn't work there.

Joe P
0
 
LVL 2

Author Comment

by:feha
ID: 17127064
i get Warning: preg_replace(): Unknown modifier ']'
0
 
LVL 2

Author Comment

by:feha
ID: 17127079
the original works in multiple $content = preg_replace("/\[exe=([^>]*)\]([^>]*)\[\/exe]/mie","''.VISION_TO_EXE('$1','$2').''",$content);
called several times works ok
0
 
LVL 17

Accepted Solution

by:
BogoJoker earned 260 total points
ID: 17127083
That means you did not copy and paste the exact regex.
"/\[exe=([^>]*?)\]([^>]*?)\[\/exe\]/mie"

And for that matter why do you need the /mie modifiers?  Try just:
"/\[exe=([^>]*?)\]([^>]*?)\[\/exe\]/i"
0
 
LVL 2

Author Comment

by:feha
ID: 17127089
how can i modify
$content = preg_replace("/\[exe=([^>]*)\]([^>]*)\[\/exe]/mie","''.VISION_TO_EXE('$1','$2').''",$content);

to use parameters as [exe=myfunction]('1','2','3')[/exe]  looks more natural ...
0
 
LVL 2

Author Comment

by:feha
ID: 17127102
Just i wont work needs to be mie  or ise else will not execute function VISION_TO_EXE ?!
0
 
LVL 17

Expert Comment

by:BogoJoker
ID: 17127120
If you want: (assuming 1, 2, and 3 are the parameters)
[exe=myfunction]('1','2','3')[/exe]

// Find the content
$content = preg_replace("/\[exe=([^>]*?)\]\(([^>]*?)\)\[\/exe\]/i","''.VISION_TO_EXE('$1','$params').''",$content);

// Once you have your params you would do something like:
$params = explode(',', $theInputs);
// So $params[0] will be '1'
// And $params[1] will be '2'


The regex is very complex because the (, ), [, ], and / symbols all have a meaning already in regular expressions.  That means in the regex you want if you really want one of those characters to appear you have to escape it.  Gets very teadious.

Joe P
0
 
LVL 2

Author Comment

by:feha
ID: 17127148
Thanks but i have already in my funcion
$result = call_user_func_array($function_name, array($sender));

this works with unlimited parameters ...

i don't like :$params = explode(',', $theInputs);

anyway it works great as is thanks a lot for your help :-)
0
 
LVL 17

Expert Comment

by:BogoJoker
ID: 17127153
Sure no problem =)
0
 
LVL 2

Author Comment

by:feha
ID: 17127198
Here is working online

http://www.vision.to/CMS/Home/index.php?pid=276

and credits to you :-)

at the bottom there is Live execution ...
0

Featured Post

Hire Technology Freelancers with Gigs

Work with freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely, and get projects done right.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

When the s#!t hits the fan, you don’t have time to look up who’s on call, draft emails, call collaborators, or send text messages. An instant chat window is definitely the way to go, especially one like HipChat. HipChat is a true business app. An…
Without even knowing it, most of us are using web applications on a daily basis.  In fact, Gmail and Yahoo email, Twitter, Facebook, and eBay are used by most of us daily—and they are web applications. We generally confuse these web applications to…
The viewer will learn how to create and use a small PHP class to apply a watermark to an image. This video shows the viewer the setup for the PHP watermark as well as important coding language. Continue to Part 2 to learn the core code used in creat…
The viewer will get a basic understanding of what section 508 compliance can entail, learn about skip navigation links, alt text, transcripts, and font size controls.
Suggested Courses

886 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question