Skip to content

Instantly share code, notes, and snippets.

@dplord
Created May 12, 2016 01:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dplord/7c498b5beb1129e688d16592cd968160 to your computer and use it in GitHub Desktop.
Save dplord/7c498b5beb1129e688d16592cd968160 to your computer and use it in GitHub Desktop.
<?php
/**
* Created by PhpStorm.
* User: dengpan
* Date: 16/4/21
* Time: 12:31
*/
namespace Thrift\Transport;
use Thrift\Transport\TTransport;
use Thrift\Exception\TException;
use Thrift\Factory\TStringFuncFactory;
/**
* Php stream transport. Reads to and writes from the php standard streams
* php://input and php://output
*
* @package thrift.transport
*/
class TPhpStreamMy extends TTransport {
const MODE_R = 1;
const MODE_W = 2;
private $inStream_ = null;
private $outStream_ = null;
private $read_ = false;
private $write_ = false;
public function __construct($in_file = null, $out_file = null) {
$this->read_ = self::MODE_R;
$this->write_ = self::MODE_W;
if(!empty($out_file)) {
$this->outStream_ = fopen($out_file, "w");
}
if(!empty($in_file)) {
$this->inStream_ = fopen($in_file, 'r');
}
}
public function open() {
if ($this->read_) {
$this->inStream_ = @fopen(self::inStreamName(), 'r');
if (!is_resource($this->inStream_)) {
throw new TException('TPhpStream: Could not open php://input');
}
}
if ($this->write_) {
$this->outStream_ = @fopen('php://output', 'w');
if (!is_resource($this->outStream_)) {
throw new TException('TPhpStream: Could not open php://output');
}
}
}
public function close() {
if ($this->read_) {
@fclose($this->inStream_);
$this->inStream_ = null;
}
if ($this->write_) {
@fclose($this->outStream_);
$this->outStream_ = null;
}
}
public function isOpen() {
return
(!$this->read_ || is_resource($this->inStream_)) &&
(!$this->write_ || is_resource($this->outStream_));
}
public function read($len) {
$data = @fread($this->inStream_, $len);
if ($data === FALSE || $data === '') {
throw new TException('TPhpStream: Could not read '.$len.' bytes');
}
return $data;
}
public function write($buf) {
while (TStringFuncFactory::create()->strlen($buf) > 0) {
$got = @fwrite($this->outStream_, $buf);
if ($got === 0 || $got === FALSE) {
throw new TException('TPhpStream: Could not write '.TStringFuncFactory::create()->strlen($buf).' bytes');
}
$buf = TStringFuncFactory::create()->substr($buf, $got);
}
}
public function flush() {
@fflush($this->outStream_);
}
private static function inStreamName()
{
// if (php_sapi_name() == 'cli') {
// return 'php://stdin';
// }
// return 'php://input';
// }
return $this->inStream_;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment