views:

60

answers:

5

I would like to access some functions defined in another PHP file, but that file also outputs content that I don't want to display.

Is there any way to access the functions without "running" the whole file? Perhaps by redirecting the output from that file to somewhere hiddeN?

+3  A: 

Eh you might be able to do something with using the output buffer and manually clearing contents, but why not just move the common functions into a common include? I usually shove common helper methods into their own file (which won't output anything).

Parrots
This is good advice. If you need to use output buffering to avoid the content of some file being shown as you're describing, you likely would benefit from some refactoring of some sort/common include files.
Keith Palmer
Yeah, you really shouldn't be putting common functions into output files. It's bad code organization.
KingRadical
A: 

Well, you could capture the output of the file using, say, an Output Buffer then discarding it. However, any other global side effects (global variables set, files written, etc) would still occur. It would be much better to refactor that file to move the functions into their own include, which can be includeed by both.

Adam Wright
+1  A: 

You could sneakily buffer the include's output using ob_start() and drop it using ob_end_clean(). This works only if the script doesn't flush the output buffer itself.

The better way would be to extract the needed functions from the include, and put them into a separate file.

Pekka
+2  A: 
<?php
ob_start();
require 'filename.php';
ob_end_clean();
?>
KARASZI István
+1  A: 

The answers involving output buffering are correct, but you're solving the wrong problem at a rather fundamental level.

Grab those functions that are useful and move them to a different file. Then include that file from both the one you're working on now, and the one where they currently reside. Everything works, no weird hacks with output buffering.

preinheimer
agreed - don't write crap code - it will come back to haunt you.C.
symcbean