ホームページ > 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 までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート