Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 290
  • Last Modified:

URGENT, vision_to_exe function

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
feha
Asked:
feha
  • 14
  • 10
1 Solution
 
BogoJokerCommented:
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
 
BogoJokerCommented:
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
 
fehaAuthor Commented:
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
Get 10% Off Your First Squarespace Website

Ready to showcase your work, publish content or promote your business online? With Squarespace’s award-winning templates and 24/7 customer service, getting started is simple. Head to Squarespace.com and use offer code ‘EXPERTS’ to get 10% off your first purchase.

 
fehaAuthor Commented:
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
 
fehaAuthor Commented:
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
 
fehaAuthor Commented:
I mean it does not work at all ...
0
 
BogoJokerCommented:
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
 
fehaAuthor Commented:
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
 
BogoJokerCommented:
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
 
fehaAuthor Commented:
[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
 
fehaAuthor Commented:
$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
 
BogoJokerCommented:
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
 
BogoJokerCommented:
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
 
fehaAuthor Commented:
Sorry none of them works , no parsing ...
0
 
BogoJokerCommented:
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
 
fehaAuthor Commented:
i get Warning: preg_replace(): Unknown modifier ']'
0
 
fehaAuthor Commented:
the original works in multiple $content = preg_replace("/\[exe=([^>]*)\]([^>]*)\[\/exe]/mie","''.VISION_TO_EXE('$1','$2').''",$content);
called several times works ok
0
 
BogoJokerCommented:
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
 
fehaAuthor Commented:
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
 
fehaAuthor Commented:
Just i wont work needs to be mie  or ise else will not execute function VISION_TO_EXE ?!
0
 
BogoJokerCommented:
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
 
fehaAuthor Commented:
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
 
BogoJokerCommented:
Sure no problem =)
0
 
fehaAuthor Commented:
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
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Easily Design & Build Your Next Website

Squarespace’s all-in-one platform gives you everything you need to express yourself creatively online, whether it is with a domain, website, or online store. Get started with your free trial today, and when ready, take 10% off your first purchase with offer code 'EXPERTS'.

  • 14
  • 10
Tackle projects and never again get stuck behind a technical roadblock.
Join Now