diff --git a/ext/http/response.c b/ext/http/response.c index 9c9a703780f..d4df735ee76 100755 --- a/ext/http/response.c +++ b/ext/http/response.c @@ -714,7 +714,7 @@ PHP_METHOD(Phalcon_Http_Response, sendCookies){ */ PHP_METHOD(Phalcon_Http_Response, send){ - zval *sent, *headers, *cookies, *content; + zval *sent, *headers, *cookies, *content, *file; PHALCON_MM_GROW(); @@ -742,7 +742,24 @@ PHP_METHOD(Phalcon_Http_Response, send){ */ PHALCON_OBS_VAR(content); phalcon_read_property_this(&content, this_ptr, SL("_content"), PH_NOISY_CC); - zend_print_zval(content, 0); + if (Z_STRLEN_P(content)) { + zend_print_zval(content, 0); + } + else { + PHALCON_OBS_VAR(file); + phalcon_read_property_this(&file, this_ptr, SL("_file"), PH_NOISY_CC); + + if (Z_STRLEN_P(file)) { + php_stream *stream; + + stream = php_stream_open_wrapper(Z_STRVAL_P(file), "rb", REPORT_ERRORS, NULL); + if (stream != NULL) { + php_stream_passthru(stream); + php_stream_close(stream); + } + } + } + phalcon_update_property_bool(this_ptr, SL("_sent"), 1 TSRMLS_CC); RETURN_THIS(); diff --git a/unit-tests/ResponseTest.php b/unit-tests/ResponseTest.php index 81b83ae87ca..b9842b0bf31 100644 --- a/unit-tests/ResponseTest.php +++ b/unit-tests/ResponseTest.php @@ -191,4 +191,15 @@ public function testContent() } -} \ No newline at end of file + public function testSetFileToSend() + { + $filename = __FILE__; + $this->_response->setFileToSend($filename); + ob_start(); + $this->_response->send(); + $actual = ob_get_clean(); + $expected = file_get_contents($filename); + $this->assertEquals($actual, $expected); + $this->assertEquals($this->_response->isSent(), true); + } +}