PDA

View Full Version : Code Excutes when called direct, but not as plug :(


Jasen Hicks
07-23-2008, 08:02 PM
Here are my forums: http://www.gamegavel.com/forum I do have the license you can ask vB :)

Anyways, I run an auction site and so does this fellow I know in AU, we are both trying to do the same thing, but since I can code and he can't I am writing it. I managed to get the code how I wanted it to exceute as a stand alone... seen here:

http://www.gamegavel.com/forum/cats.php

Code for the file:

<?php

include('../includes/config.php');
include('../includes/functions.php');
include('../includes/class_database.php');
include('../language/english/category.lang.php');

$db = new database;

$db->connect($db_host, $db_username, $db_password);
$db->select_db($db_name);

$sql_select_cats_list = $db->query("SELECT category_id, items_counter, hover_title FROM

" . DB_PREFIX . "categories WHERE parent_id=0 AND hidden=0 AND user_id=0 ORDER BY order_id ASC");
?>

<table width="100%" border="0" cellspacing="1" cellpadding="2" class="bordercat">

<?
while ($cats_header_details = $db->fetch_array($sql_select_cats_list))
{
$category_link = process_link('categories', array('category' => $category_lang[$cats_header_details['category_id']], 'parent_id' => $cats_header_details['category_id'])); ?>
<tr>
<td class="contentfont"><img src="../themes/auzbay_theme/img/arrow.gif" hspace="3" align="absmiddle"><a class="ln" href="../<?=$category_link;?>" <?=((!empty($cats_header_details['hover_title'])) ? 'title="' . $cats_header_details['hover_title'] . '"' : '');?>>
<?=$category_lang[$cats_header_details['category_id']];?>
<?=(($setts['enable_cat_counters']) ? (($cats_header_details['items_counter']) ? '(<strong>' . $cats_header_details['items_counter'] . '</strong>)' : '(' . $cats_header_details['items_counter'] . ')') : '');?></a></td>
</tr>
<? } ?>
</table>


Comes up great, looks fine for now, so lets make the plugin.

I go in, add the plugin like so:


ob_start();
include('forums/cats.php');
$includedphp = ob_get_contents();
ob_end_clean();


Then, when I activate it, I get:

Warning: include(home/gamega5/public_html/auction/forums/cats.php) [function.include]: failed to open stream: No such file or directory in [path]/global.php(405) : eval()'d code on line 2

Warning: include(home/gamega5/public_html/auction/forums/cats.php) [function.include]: failed to open stream: No such file or directory in [path]/global.php(405) : eval()'d code on line 2

Warning: include() [function.include]: Failed opening 'home/gamega5/public_html/auction/forums/cats.php' for inclusion (include_path='.:/usr/lib/php:/usr/local/lib/php') in [path]/global.php(405) : eval()'d code on line 2

At the top of the forums where I inserted the $includephp.

So then, I change the path so the plugin code now looks like this:


ob_start();
include('home/gamega_5/public_html/forums/cats.php');
$includedphp = ob_get_contents();
ob_end_clean();


But I get the same error. Am I really doing something that wrong?

Opserty
07-23-2008, 09:23 PM
Maybe include('./../forums/cats.php'); is the file location you need?

Jasen Hicks
07-24-2008, 02:50 AM
Tried that and received this error:

Fatal error: Call to undefined method database::query_read_slave() in /home/gamega5/public_html/forums/index.php on line 415

Dismounted
07-24-2008, 07:37 AM
Always chdir() to the forum directory in your scripts if they are located outside the forum root directory. Most likely, that is the problem.

Jasen Hicks
07-24-2008, 03:33 PM
cats.php is in the forum directory.... let me do some research on chdir() to see if it will help. Thanks for the tips.

EDIT*

I added chdir('forums'); as suggested. The script ran, but gave the error no folder called forums. Maybe because the file is alreayd in the forums directory.

This is really kicking my butt, it seems so simple. The file works when called direct, but gives an error when called in vB. Is my code for the call right (in the plugin)?

--------------- Added 1216930223 at 1216930223 ---------------

Any other advice?

Dismounted
07-25-2008, 06:45 AM
Please post the code you are using now.

Jasen Hicks
07-25-2008, 12:36 PM
Dismounted....

Same as above in the OP since the chdir() within cats.php didnt do anything except cause an error.

Here is the gist of what I did...

1. Wrote cats.php a standalone php file, that you can call directly from your browser. Check it out: www.gamegavel.com/forums/cats.php. It generates a nice list of categories from my Auction site.

2. Then I went to the plugins manager, and just did a simple include to call the file, cats.php. I used the required ob stuff to do the include.

3. I tried to use chdir('forums'); to ensure I was in the forums folder where the file was located, but it gave an error because the file was in the forums folder already.

This seems so weird, I mean the file executes when called from the browser but if I try to call it within vB... vB throws the error.

Dismounted
07-26-2008, 04:53 AM
Use the full path in chdir (eg. /home/someuser/public_html/). Then make sure all your includes are just "./somefile.php" (one preceding dot only).

Jasen Hicks
07-26-2008, 05:12 AM
Do I use the chdir(/home/gamega5/public_html/forum); in the external php file (cats.php)? or do I use it in the plugin code itself?

Dismounted
07-26-2008, 05:20 AM
cats.php, at the very top.

Zachery
07-26-2008, 06:12 AM
If you chdir once to grab a file, you need to chdir back to the vbulletin working directory.

Opserty
07-26-2008, 08:21 AM
If you are putting this in a plugin, you don't need to include any vBulletin files. The vBulletin back-end is already included when you are inside a plugin...

Also the $db variable is already set too.

Just imagine it as though you've copied and pasted the code directly into the vBulletin file in where the hook is located. So it just runs normally.

Unless you need this as a standalone file?

(Note: You will need to remove the echo()'s or use output buffering functions to grab any output)

Jasen Hicks
07-26-2008, 10:08 AM
I'd like to keep it as a standalone file, as it is pulling information from my probid installation which is using a different database than vB. Plus, I can make it modular for other applications (i.e. outside of vB if needed).

the $db variable in cats.php is calling up the probid database, not the vB database.

--------------- Added 1217071152 at 1217071152 ---------------

Oh my lord! I finally got it working! Thank you to everyone for the help. Here is what I think was the problem...

My file was using the variable $db... so, i think that was one problem.

Second, I didnt use the chdir()...

Thank you all for the help! I love this place. Now... I can finally finish this plugin :)