px-files/_sys/php/px.php
public function internal_sub_request($request_path, $options = null, &$return_var = null){
		if(!is_string($request_path)){
			$this->error('Invalid argument supplied for 1st option $request_path in $px->internal_sub_request(). It required String value.');
			return false;
		}
		if(!strlen($request_path)){ $request_path = '/'; }
		if(is_null($options)){ $options = array(); }
		$php_command = array();
		array_push( $php_command, addslashes($this->conf()->commands->php) );
			// ↑ Windows でこれを `escapeshellarg()` でエスケープすると、なぜかエラーに。

		if( strlen(@$this->conf()->path_phpini) ){
			$php_command = array_merge(
				$php_command,
				array(
					'-c', escapeshellarg(@$this->conf()->path_phpini),// ← php.ini のパス
				)
			);
		}
		if( strlen(@$this->req()->get_cli_option( '-d' )) ){
			$php_command = array_merge(
				$php_command,
				array(
					'-d', escapeshellarg(@$this->req()->get_cli_option( '-d' )),// ← php.ini definition
				)
			);
		}
		array_push($php_command, escapeshellarg( realpath($_SERVER['SCRIPT_FILENAME']) ));
		if( @$options['output'] == 'json' ){
			array_push($php_command, '-o');
			array_push($php_command, 'json');
		}
		if( @strlen($options['user_agent']) ){
			array_push($php_command, '-u');
			array_push($php_command, escapeshellarg($options['user_agent']));
		}
		array_push($php_command, escapeshellarg($request_path));


		$cmd = implode( ' ', $php_command );

		// コマンドを実行
		ob_start();
		$proc = proc_open($cmd, array(
			0 => array('pipe','r'),
			1 => array('pipe','w'),
			2 => array('pipe','w'),
		), $pipes);
		$io = array();
		foreach($pipes as $idx=>$pipe){
			$io[$idx] = stream_get_contents($pipe);
			fclose($pipe);
		}
		$return_var = proc_close($proc);
		ob_get_clean();

		$bin = $io[1]; // stdout
		if( strlen( $io[2] ) ){
			$this->error($io[2]); // stderr
		}

		if( @$options['output'] == 'json' ){
			$bin = json_decode($bin);
		}

		return $bin;
	}
public function internal_sub_request($request_path, $options = null, &$return_var = null){
		if(!is_string($request_path)){
			$this->error('Invalid argument supplied for 1st option $request_path in $px->internal_sub_request(). It required String value.');
			return false;
		}
		if(!strlen($request_path)){ $request_path = '/'; }
		if(is_null($options)){ $options = array(); }
		$php_command = array();
		array_push( $php_command, addslashes($this->conf()->commands->php) );
			// ↑ Windows でこれを `escapeshellarg()` でエスケープすると、なぜかエラーに。

		if( strlen(@$this->conf()->path_phpini) ){
			$php_command = array_merge(
				$php_command,
				array(
					'-c', escapeshellarg(@$this->conf()->path_phpini),// ← php.ini のパス
				)
			);
		}
		if( strlen(@$this->req()->get_cli_option( '-d' )) ){
			$php_command = array_merge(
				$php_command,
				array(
					'-d', escapeshellarg(@$this->req()->get_cli_option( '-d' )),// ← php.ini definition
				)
			);
		}
		array_push($php_command, escapeshellarg( realpath($_SERVER['SCRIPT_FILENAME']) ));
		if( @$options['output'] == 'json' ){
			array_push($php_command, '-o');
			array_push($php_command, 'json');
		}
		if( @strlen($options['user_agent']) ){
			array_push($php_command, '-u');
			array_push($php_command, escapeshellarg($options['user_agent']));
		}
		array_push($php_command, escapeshellarg($request_path));


		$cmd = implode( ' ', $php_command );

		// コマンドを実行
		ob_start();
		$proc = proc_open($cmd, array(
			0 => array('pipe','r'),
			1 => array('pipe','w'),
			2 => array('pipe','w'),
		), $pipes);
		$io = array();
		foreach($pipes as $idx=>$pipe){
			$io[$idx] = stream_get_contents($pipe);
			fclose($pipe);
		}
		$return_var = proc_close($proc);
		ob_get_clean();

		$bin = $io[1]; // stdout
		if( strlen( $io[2] ) ){
			$this->error($io[2]); // stderr
		}

		if( @$options['output'] == 'json' ){
			$bin = json_decode($bin);
		}

		return $bin;
	}
Pickles 2 内部でサブリクエストを発行し、結果を受け取る

@param string $request_path リクエストを発行する対象のパス
@param array $options Pickles 2 へのコマンド発行時のオプション
- output = 期待する出力形式。`json` を指定すると、サブリクエストに `-o json` オプションが加えられ、JSON形式で解析済みのオブジェクトが返されます。
- user_agent = `HTTP_USER_AGENT` 文字列。 `user_agent` が空白の場合、または文字列 `PicklesCrawler` を含む場合には、パブリッシュツールからのアクセスであるとみなされます。
@param int &$return_var コマンドの終了コードで上書きされます
@return mixed サブリクエストの実行結果。
通常は 得られた標準出力をそのまま文字列として返します。
`output` オプションに `json` が指定された場合、 `json_decode()` された値が返却されます。

サブリクエストから標準エラー出力を検出した場合、 `$px->error( $stderr )` に転送します。