DirectPHP plugin |
| Written by kksou | ||||||||
| Monday, 24 March 2008 | ||||||||
This plugin allows direct embedding of PHP commands right inside Joomla content page for dynamic contents. Available for all Joomla versions: Joomla 1.0.x, native 1.5.x, 1.6.x and 1.7.x! Very Important: If you're using Joomla 1.6 or Joomla 1.7, don't forget to set the Filter Type to "No Filtering" so that you can enter PHP codes in a Joomla 1.6 / 1.7 articles. Details here (works for both Joomla 1.6 and 1.7). If you're using Joomla 1.5, please refer to the article: Table of Contents
Key Features
<?php php_commands... ?> Now is: <?php echo date('Y-m-d H:i:s');?>
<?php
require_once('fullpath/your_lib.php');
your_php_func();
?>
Latest version v2.5 (for Joomla 2.5) Native version of DirectPHP for Joomla 2.5! Don't forget to set the Filter Type to "No Filtering" so that you can enter PHP codes in a Joomla 2.5 article using the default WYSIWYG editor. Details here. BackgroundI've recently redesigned this website using Joomla. As you can see, there are more than 450 PHP-GTK sample codes. It's just too much a hassle to include each sample code into every article. Isn't it nice if I could do a simple echo "<pre>".htmlentities('filename.php')."</pre>";
to automatically include the respective sample code? I've tried two other plugins: Jumi and RunPHP .
So I decided to develop my own plugin, and the result is this plugin DirectPHP. How to install (Joomla 1.0.x)
Current date and time is: <?php echo date('Y-m-d H:i:s');?>
To customize the block list (Joomla 1.0.x)
How to install (Joomla 1.5.x)
Current date and time is: <?php echo date('Y-m-d H:i:s');?>
To customize the block list (Joomla 1.5.x)
ExamplesHere are some examples:
Now is: <?php echo date('l j D, Y H:i:s');?>
<?php
for ($i=0; $i<10; ++$i) {
echo "$i: ".$i*$i,"<br>";
}
?>
<?php
require_once('/fullpath/your_php_library.php');
display_image('image123.jpg');
?>
<?php global $a;
$a = 10;?>
This is a test. variable $a = <?php echo $a;?>
<?php
function f1() {
global $a;
return $a*2;
}
$b = f1($a);
?>
You can access variable $a from within the function with global.
variable $b = <?php echo $b;?>
<?php echo "<table border=4$gt;"; echo "<tr><td>a11</td><td>a12</td></tr>"; echo "<tr><td>a11</td><td>a12</td></tr>"; echo "</table>"; ?> For Joomla 1.0: <?php
global $my;
if ($my->id==0) {
// non-registered members
print "Please register or login.";
} else {
// registered members
print "Contents for registered members.";
}
?>
For Joomla 1.5: <?php
$user =& JFactory::getUser();
if ($user->id==0) {
// non-registered members
print "Please register or login.";
} else {
// registered members
print "Contents for registered members.";
}
?>
Important Note: Blocking of PHP commandsBy default, I've blocked some of the potentially "risky" commands, e.g. system, fopen, unlink, rmdir, etc. You can view the entire list of PHP commands that are blocked in the plugin's property page. In there, you can also add, edit or delete this list of commands to suit your needs. If you need to use any of these commands (e.g. mkdir) from within the content page, put them in one of the library files on your server, do a If you insist, you may choose to turn off the blocking in the property page. However, I would strongly advise that you do so only if you're the only one maintaining your Joomla site. If you're opening up the adding and editing of content pages to the public, DO NOT turn off the blocking. It's too dangerous. DisclaimerDirectPHP is a simple, yet flexible and powerful plugin. I'm using it on this website. I'm sharing with you here because I think it will be very useful to some of you. Your use of this plugin is at your own risk. kksou.com makes no warranties or representations, express or implied, as to the functionality or usefulness of this plugin. kksou.com disclaims all warranties, express or implied, including without limitation warranties of merchantability and fitness for a particular purpose. kksou.com disclaims liability for any direct, indirect, incidental, consequential, special, exemplary, punitive or other damages, or lost profits, that may result, directly or indirectly, from your use of this plugin, including without limitation any damage to computer systems, hardware or software, loss of data, or any other performance failures, or any errors, bugs, viruses or other defects that result from or are associated with use of this plugin. Be a SponsorIf you find this plugin useful, Secure Payments by PayPal. DownloadDirectPHP for Joomla 1.0.x: DirectPHP_v1.06
DirectPHP for Joomla 1.5.x: DirectPHP_v1.56 Joomla 1.6 DirectPHP for Joomla 1.6.x: DirectPHP_v1.6 Joomla 1.7 DirectPHP for Joomla 1.7.x: DirectPHP_v1.7 Joomla 2.5 DirectPHP for Joomla 2.5.x: DirectPHP_v2.5 Don't forget to set the Filter Type to "No Filtering" so that you can enter PHP codes in a Joomla 1.6/1.7/2.5 articles. Details here for Joomla 1.6/1.7 Details here for Joomla 2.5. Note: To upgrade to the newer version, simply uninstall the old version and install the new version of the plugin. Version History
In TinyMCE Editor, when you press Enter, internally it's stored as a <p>. If you press shift-Enter, internally it's stored as <br>. In v1.00, if the user presses Enter after "<?php", the php script will not be captured. I only preg_matched for <br>. Overlooked the case for <p>. Bug has been fixed. In some of the editors, tabs is internally stored as &160;. If you're using tabs for code indentation, please download this update. Encapsulate all functions used by DirectPHP within a class so that you can use DirectPHP with some other plugins such as the "DirectPHP for Category Description" plugin. Now supports both PHP5 and PHP4. Thanks to Salvatore who informed me about some "mysterious" double-byte characters that get inserted into the DirectPHP code by the content editor of some of the non-English Joomla. These double-byte characters will cause error when processing the PHP commands with eval(). Have fixed this in this version. Added one more parameter "Using No Editor". If you're not using any editor when editing content articles, select 'yes' for this parameter. This will allow you to freely use any HTML tags (such as <br /> or <p>). Native version of DirectPHP for Joomla 1.6! Don't forget to set the Filter Type to "No Filtering" so that you can enter PHP codes in a Joomla 1.6 articles. Details here. Native version of DirectPHP for Joomla 1.7! Don't forget to set the Filter Type to "No Filtering" so that you can enter PHP codes in a Joomla 1.7 article using the default WYSIWYG editor. Details here (works for both Joomla 1.6 and 1.7). |
||||||||
| < Prev |
|---|







Comments
1) what have you tried?
2) what are the tags that you are using? 3) what are the error messages that you see on the screen?
4) Can you try just a simple PHP statement such as echo "test123".
Does this work? Did you see the string "test123" on the screen?
Regards,
/kksou
thanks for answer. I have tried to add directly in article one complete file php that is a part of script but not work.
First of all, DirectPHP is not originally designed to be used to enter complicated PHP codes. I wrote it originally to allow myself to enter simple PHP codes here and there in a Joomla article. If you need to include complicated PHP codes, you might want to write a plugin for that purpose. It's cleaner and easier to debug that way.
Besides, note that this is a plugin. As the name suggests, you are running PHP codes within the Joomla framework. So NOT ALL php scripts will run within your Joomla article.
If you are still keen to try DirectPHP, please try something simpler first, such as echo "test123";
This will allow you to know if DirectPHP works at all on your server.
Once you are certain that DirectPHP runs on your server, you can try adding more complicated PHP commands to see if it works within your Joomla article.
Again, just want to emphasize again you are running PHP script within the Joomla framework. So NOT ALL scripts will run. You need some trials and errors to test it out.
Regards,
/kksou
Is it works on Joomla 2.5?
Have just released DirectPHP for Joomla 2.5!
Regards,
/kksou
it does not work :-( why?
Your code didn't appear.
Would you like to email the code to me?
Regards,
/kksou
I've got j 2.5 and I've gone through all steps and installed plugin.
However each time i write article content with tinyMCE like:
Now is:
it keeps changing it to:
Now is:
Any hints? I turned the filtering off
Quoting sqrl:
As the name says, this is a plugin.
So you will see it in the Plugin Manager and not Module Manager.
Regards,
/kksou
p.s. as this is a plugin, it's for use within an article. You can create a new article and test running some PHP commands from within the article.
Parse error: syntax error, unexpected $end, expecting ',' or ';' in Z:\home\localho st\www\comfy-yard\plugins\co ntent\DirectPHP \DirectPHP.php(57) : eval()'d code on line 1
DirectPHP process PHP statements using the standard PHP's eval() function.
The error messages simply means there's some error in your code.
It's every difficult to debug based on the error message returned from the eval() statement. Would suggest you copy and paste your codes into a plain .php file and try running that .php file. You will get more meaningful error message that tells you where and what the error is.
Regards,
/kksou
Thanks again.
Sorry for the late reply.
Let me answer your second question first. With DirectPHP, you can have dynamic contents within an article. You can also display and process things like forms within an article. Of course, there are many things you can achieve using the method you have just mentioned, i.e. putting the PHP into a module and then loading its position from an article. However, I think you can see that this is an "indirect" method - as oppose to Joomla running the PHP codes directly in the article. Second, there are some things you cannot do using the "module" method. e.g. if you are using the googleMaps plugin, I can use PHP to generate a dynamic tag to display different google maps every time depending on the user or the content. I can also use PHP to choose which content plugins to run depending on situations.
As for yoru first question, this is the reason why I put a "Disclaimer" just before the downloading section of this page - it's powerful, but you have to use this at your own risk. (This is true for any other plugins that allow you to input PHP.) If you are the administrator for your website, and you know what you are doing, then using this is relatively safe. But if you website has many authors and publishers, then I would be a bit worried using this type of tools too.
Hope this helps.
Regards,
/kksou
I must include the php in an article so the client can modify prices later. I was using JCE editor, and switched to tinyMCE. Site is v1.6.
I followed all your instructions, set Article Manager filtering to none for Super Users and Admin. It was already set for Super Users. I inserted the script into the page it belongs on, complete with '' at the beginning and end. No other text or code was included. The script is 138 lines. Is that too long for this plugin to handle?
I also tested just '' to see if a short script would work. All I get is the entire php script, the short or long one, displaying on the page, with tags. Is this enough info to determine what I may have done wrong?
I was explaining that I used php tags in the long script, and tried a simple one sentence echo statement to see if the long script was the problem. Neither worked. I would understand if the longer script didn't work and the shorter one did, but that's not the case. Many thanks.
When using the default Joomla editor, please DO NOT use the HTML mode. Use the wysiwyg mode.
Please try just one line:
echo 'test123';
first and see if works.
DirectPHP can work with multiple lines - it's just that debugging is very difficult.
In any case, please try the above one more time and let me know if it works.
Regards,
/kksou
This exact same 138 line file works fine in a WAMP environment, serving up IE. The code returns and displays the calculations.
Would there be a difference between the code a WAMP server can use and code in a Joomla article?
and when I load the public page I get the following error message: Parse error syntax error unexpected '.' in /public_html/n/plugins/content/DirectPHP/DirectPHP.php(58): eval()'d code on line 1
Thank you for your time,
Chris
Your entire code is processed by the standard PHP eval() statement. As such it's very difficult to debug anything from the error message.
Would suggest you copy the entire PHP code into a standalone PHP file.
1) First try if your standalone .php file runs at all. If it doesn't run, the error messages returned by the PHP interpreter will be more meaningful and easier to debug.
2) Once your standalone PHP file runs ok, you can use DirectPHP from within your Joomla article and do a require() or include() to include your PHP code. See if the code now runs.
3) Once (2) works, you can then try to copy and paste your PHP codes from the standalone PHP file back into the article. See if it works.
Note that even if (1) works, it does not necessarily means (2) and (3) will work. Bear in mind that you are running your codes within the Joomla framework - so not all PHP codes will run the same within Joomla. This is particularly the case if you are using mysql that connects to another database - You have to remember to reconnect the database back to your underlying Joomla mysql database, otherwise it has no way to connect back to your Joomla environment.
In any case, I wrote DirectPHP to run some simple PHP scripts. If you need to run complicated PHP scripts, would suggest you write a proper Joomla plugin or module. It's much cleaner and the codes are easier to debug.
Regards,
/kksou
script:
Work in standard PHP,
in DirectPHP have error
"Parse error: syntax error, unexpected T_STRING, expecting ',' or ';' in /plugins/content/DirectPHP/DirectPHP.php(57) : eval()'d code on line 1"
if ($_GET["chronoform"]=="WybierzDate")
{
echo "{chronoforms}Li sta dni{/chronoforms}";
} else
{
echo "{chronoforms}Wy beierzDate{/chronoforms}";
}
1) Please try a simple one-liner PHP: echo "test123";
Just want to make sure that DirectPHP is running ok on your machine.
2) If (1) works, and you're sure that your codes above works fine in standard PHP, then the other possibilities is that the order of DirectPHP comes before that of your other plugin "chronoforms".
Please go to the Plugin Manager and see what's the order of DirectPHP and your other plugin chronoforms. If both are 0, please set DirectPHP to be 9, and chronoforms to be 10. If, say, the order of chronoforms is 3, then change the order of DirectPHP to be 2.
The key thing is: the order of DirectPHP must go BEFORE that of chronoforms - this will ensure that DirectPHP is processed first, followed by your chronoforms plugin.
Otherwise, if chronoforms is processed first, it will produce some codes which then go into DirectPHP - resulting in error because most likely chronoforms will not produce valid PHP codes.
Please give it a try again and let me know if it works.
Regards,
/kksou
"Parse error: syntax error, unexpected T_STRING, expecting ',' or ';' in /plugins/content/DirectPHP/DirectPHP.php(59) : eval()'d code on line 1"
As the error message says, the error message is in the PHP code that you're trying to run.
Please refer to the following post for debugging tips: http://www.kksou.com/php-gtk2/index.php?option=com_fireboard&Itemid=67&func=view&id=4601&catid=16#4617
Regards,
/kksou
I installed the plug-in, enabled it, changed the SU setting to "No Filtering", but the expected results do not show.
The PHP code in my article is "
When I investigate why the expected output did not show, it is because there are HTML comment tags around the PHP code.
I did check to make sure that "Prepare content" was "Yes", as suggested on the Joomla forums.
Any ideas? Thanks...
less-than-character NOSPACE question-mark NOSPACE php SPACE echo SPACE "Hi."; SPACE question-mark NOSPACE greater-than-character
1) Did you see anything on the screen? Did you see the code?
2) When you enter the PHP codes in the article using the default Joomla editor, please make sure that you enter in the WYSIWYG mode. DO NOT use the HTML mode.
Regards,
/kksou
My next task is to get PHP code working that will output text as an image. My first attempt outputted the raw image data rather than the browser rendering an actual image.
I'm interested in using phpDirect, but I want to restrict the possibility of including php-code only for Super-User. It'S possible? In which way?
Greetings * Peter Winkels
Joomla does not have any access control for plugins and modules. So there's no way you can restrict the running of a plugin by users.
But if you know a bit of PHP and know how to retrieve the user id from within the Joomla framework, you can modify the source code of DirectPHP to achieve this.
Regards,
/kksou
I need to access to some virtuemart table directly....
echo 'abc'
comes out as 'abc' (no p-tags ...)
Any idea? Thank you!
Have you tried the tips as outlined in the article "How to enter HTML tags, javascript and PHP codes in Joomla 2.5?": http://www.kksou.com/php-gtk2/Joomla-Tips-Techniques/How-to-enter-HTML-tags-javascript-and-PHP-codes-in-Joomla-2.5.php
Regards,
/kksou
RSS feed for comments to this post