|  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #57880 Capturing output via exp_loguser from within PHP / Apache
Submitted: 2007-10-17 16:30 UTC Modified: 2007-10-20 03:18 UTC
From: maport1 at uky dot edu Assigned:
Status: Closed Package: expect (PECL)
PHP Version: 5.2.1 OS: Linux
Private report: No CVE-ID: None
 [2007-10-17 16:30 UTC] maport1 at uky dot edu
Is there a method so that the Expect library output (turned on via exp_loguser) is accessible to the calling script running with PHP as an Apache module?  For example, this would be used to display a telnet session trace when it has failed out.  In my testing, it appears that the output is sent to the php://stdout stream, and thus it is unavailable to the calling script within Apache.  I understand that exp_logfile can be set to redirect output to a file, but is it possible to somehow pass a flag so that the log is actually displayed in the php://output stream?  I would attempt this myself (as with the subpattern matching changes), but I don't understand enough of the underlying Zend streams model to join the output streams.

Reproduce code:
    ini_set("expect.loguser", 1);


    print "Opening connection to localhost ...\n";
    $fp = fopen("expect://ssh", "r");

    . . . .


    $trace = ob_get_contents();

Expected result:
$trace contains the full output from Expect

Actual result:
$trace contains only output sent via the print and echo commands


Add a Patch

Pull Requests

Add a Pull Request


AllCommentsChangesGit/SVN commitsRelated reports
 [2007-10-17 17:30 UTC] maport1 at uky dot edu
Mark Frost and I created a patch that *appears* to work in the manner I was expecting.  It adds a fourth .ini boolean parameter, expect.logoutput, that passes the php://output stream to exp_logfile.  We would, however, appreciate a second eye checking for potential errors.

Here is the patch:

--- expect-0.2.3/expect.c       2006-07-05 10:51:56.000000000 -0400
+++ expect-0.2.4/expect.c       2007-10-17 17:19:40.000000000 -0400
@@ -82,7 +82,7 @@
        if (new_value_length > 0) {
                exp_logfile = fopen (new_value, "a");
                if (!exp_logfile) {
-                       php_error_docref (NULL TSRMLS_CC, E_ERROR, "could not open log file for writting");
+                       php_error_docref (NULL TSRMLS_CC, E_ERROR, "could not open log file for writing");
                        return FAILURE;
@@ -91,10 +91,27 @@
 /* }}} */
+/* {{{ PHP_INI_MH
+ *  */
+static PHP_INI_MH(OnSetExpectLogOutput)
+       if (new_value) {
+               if (!strncasecmp("on", new_value, sizeof("on")) || atoi(new_value)) {
+                       php_stream *out = php_stream_open_wrapper("php://output", "w", 0, NULL);
+                       FILE * php_output;
+                       (void) php_stream_cast(out, PHP_STREAM_AS_STDIO, (void **) &php_output, REPORT_ERRORS);
+                       exp_logfile = php_output;
+               }
+       }
+/* }}} */
        PHP_INI_ENTRY("expect.timeout", "10", PHP_INI_ALL, OnSetExpectTimeout)
        PHP_INI_ENTRY_EX("expect.loguser", "1", PHP_INI_ALL, OnSetExpectLogUser, php_ini_boolean_displayer_cb)
        PHP_INI_ENTRY("expect.logfile", "", PHP_INI_ALL, OnSetExpectLogFile)
+       PHP_INI_ENTRY_EX("expect.logoutput", "0", PHP_INI_ALL, OnSetExpectLogOutput, php_ini_boolean_displayer_cb)
 [2007-10-20 03:18 UTC] spektom at gmail dot com
Thank you for your bug report. This issue has been fixed
in the latest released version of the package, which you can download at

Fixed in v.0.2.4

Use set_ini('expect.logfile', 'php://output') for re-directing expect output to output buffer mechanism.
PHP Copyright © 2001-2019 The PHP Group
All rights reserved.
Last updated: Fri Mar 22 06:01:26 2019 UTC