> php教程 > php手册 > 通过PHP自定义协议实现把字符串代码变为可以执行代码

通过PHP自定义协议实现把字符串代码变为可以执行代码

WBOY
풀어 주다: 2016-06-06 19:36:54
원래의
1745명이 탐색했습니다.

以crossphp中解析注释配置为例,定义协议名:annotate $str_code = array(foo=bar); stream_register_wrapper(annotate,stringToPHPStream); $var=include(annotate://{$str_code}); print_r($var); 这样字符串$str_code就变成了一个php的array,远离eval吧,骚年

以crossphp中解析注释配置为例,定义协议名:annotate

$str_code = 'array("foo"=>"bar")';
stream_register_wrapper("annotate", "stringToPHPStream");
$var = include ("annotate://{$str_code}");

print_r($var);
这样字符串$str_code就变成了一个php的array, 远离eval吧,骚年~
如果要更改示例中协议名称,请更改stringToPHPStream这个类中的stream_open方法 CrossPHP
<?php

include __DIR__.'/stringToPHPStream.php';

$str_code = 'array("foo"=>"bar")';
stream_register_wrapper("annotate", "stringToPHPStream");
$var = include ("annotate://{$str_code}");

print_r($var);
로그인 후 복사
<?php
/**
 * 字符串php代码通过wrapper转换为可以执行的php代码
 * <pre class="brush:php;toolbar:false">
 * 使用方式 stream_register_wrapper("自定义名字", "stringToPHPStream")
 * $var = include ("自定义名字://字符串代码")
 * 
로그인 후 복사
* * @Auth: wonli * Class StringToPHPStream * @package Cross\Lib\Other */ class StringToPHPStream { /** * 代码内容 * * @var array */ static $content; /** * 在$content中的标示 * * @var string */ protected $key; /** * @var int */ protected $pos; /** * @param $path * @param $mode * @param $options * @param $opened_path * @return bool */ public function stream_open($path, $mode, $options, $opened_path) { $this->key = md5($path); if (! isset(self::$content[$this->key])) { self::$content[$this->key] = sprintf('pos = 0; return true; } /** * @param $count * @return string */ public function stream_read($count) { $content = self::$content[$this->key]; $ret = substr($content, $this->pos, $count); $this->pos += strlen($ret); return $ret; } /** * */ public function stream_stat() { } /** * */ public function stream_eof() { } }
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿