PHP学习之六:语言杂项

PHP代码审计基础:PHP伪协议 文章目录file://协议php://协议data:// 协议 file://协议 条件: allow_url_fopen = on/off allow_url_include = on/off 作用: 用于访问本地文件系统,在CTF中通常用来读取本地文件的且不受allow_url_fopen与allow_url_include的影响。 include()/require()/include_once()/require_once()参数可控的情况下,如导入为非.php文件,则仍按照php语法进行解析 阅读详情

1 关于引用的解释

在PHP中,引用可以看作是与Linux中的hardlink类似的东西,也叫别名,它与指针是不同的。不同的是PHP中的引用是可以复制的,如$a=&$b; $c=$a;

引用可以使得两个变量指向对一块内容,如$a = &$b;

引用可以传递变量,通过将一个变量传递给函数,函数就可以修改其参数的值。只有变量和new语句才能通过引用传递,对于类变量默认都是按引用传递的。

<?php
function foo(&$var)
{
    $var++;
}

$a=5;
foo($a);
// $a is 6 here
?>


函数可以返回引用。

http://write.blog.youkuaiyun.com/postedit/7703091

<?php
class foo {
    public $value = 42;

    public function &getValue() {
        return $this->value;
    }
}

$obj = new foo;
$myValue = &$obj->getValue(); // $myValue is a reference to $obj->value, which is 42.
$obj->value = 2;
echo $myValue;                // prints the new value of $obj->value, i.e. 2.
?>

取消引用需要unset被引用的变量即可,此时只是断开所有引用,并不会清空变量的值。


2 预定义变量

$GLOBALS: 包含所有定义的全局变量的信息,键的key为

$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目。此变量中包含以下元素:

    argv 传递给脚本的参数数组,当以get方式调用时,传递的是查询串。

    argc 参数个数

    GATEWAY_INTERFACE  服务器使用CGI规范的版本,如CGI/1.1

    SERVER_ADDR  当前运行脚本的服务器的地址

    SERVER_NAME  当前运行脚本的主机名。

    SERVER_SOFTWARE 服务器标识串,在响应请求时头信息中给出

    SERVER_PROTOCOL  请求页面时协议名称与版本,如HTTP/1.1

    REQUEST_METHOD    请求方法,如GET/HEAD/POST/PUT等

    REQUEST_TIME    请求开始的时间戳

    QUERY_STRING    通过页面访问时的查询字符串

    DOCUMENT_ROOT 当前运行脚本所在的文档根目录

    HTTP_ACCEPT    当前请求头中Accept项的内容

    HTTP_ACCEPT_CHARSET  当前请求头中Accept-Charset的内容

    类似的变量还有:HTTP_ACCEPT_ENCODING,HTTP_ACCEPT_LANGUAGE,HTTP_CONNECTION,HTTP_HOST,HTTP_REFERER,HTTP_USER_AGENT

    HTTPS    若用户通过https访问的话,此变量非NULL

    REMOTE_ADDR/HOST/PORT   浏览当前页面用户的IP地址/主机名/端口

    SERVER_PORT  WWW的服务端口

    PATH_TRANLATED  当前脚本所在文件系统的绝对路径

    SCRIPT_NAME    包含当前脚本的路径

    PATH_INFO    由客户端提供的,跟在脚本名称之后且在查询语句之前的路径信息。例如:http://www.example.com/php/path_info.php/some/stuff?foo=bar 被访问,那么                      $_SERVER['PATH_INFO'] 将包含 /some/stuff

    REQUEST_URI    用来指定要访问的页面,即主机名后面的部分

    PHP_AUTH_USER/PW  PHP运行在Apache或IIS模块方式下需要用HTTP认证的用户名与密码


$_GET    通过URL传递给当前脚本的变量的数组,其已经过urldecode()处理。

$_POST  通过HTTP POST方法传递给当前脚本的变量的数组

$_FILE  

$_REQUEST    默认情况下包含了$_GET $_POST和$_COOKIE的数组

$_SESSION

$_ENV    通过环境方式传递给当前脚本的变量数组

$_COOKIE    通过HTTP Cookie方式传递给当前脚本的变量的数组

$HTTP_RAW_POST_DATA     包含POST提交的原始数据

$argc 与$argv 包含当前运行于命令行下时传递给当前脚本的参数的数组

  

3 预定义异常

Exception是所有异常的基类,在上一篇文章中有相关的介绍。

另一个异常是ErrorException 定义了错误异常,其用于描述异常的严重程度。


5 上下文选项

PHP提供了一些便利的在各种协议应用场景下的上下文选项,以方便我们使用。

5.1 Socket上下文

bindto  以ip:port的形式提供,用于指示tcp等的连接地址

backlog 整数,表示listen的队列大小

<?php
$opts = array(
    'socket' => array(
        'bindto' => '192.168.0.100:7000',
    ),
);

$context = stream_context_create($opts);

$content = file_get_content('http://www.example.com',false,$context);

echo $content;
?>


5.2 HTTP上下文

method  string

header   string

user_agent   string

content    string

proxy     string

request_fulluri   bool

follow_lodateion    bool

max_redirects     int

protocol_version    float

timeout     float

ignore_errors   bool

<?php

$postdata = http_build_query(
    array(
        'var1' => 'some content',
        'var2' => 'doh'
    )
);

$opts = array('http' =>
    array(
        'method'  => 'POST',
        'header'  => 'Content-type: application/x-www-form-urlencoded',
        'content' => $postdata
    )
);

$context = stream_context_create($opts);

$result = file_get_contents('http://example.com/submit.php', false, $context);

?>



此外PHP还支持FTP,SSL,CURL等的上下文,具体可以参考文档。

6 协议封装器

PHP内置封装了多种类似URL样式的协议,都可以通过fopen() file_exists()等来访问。用户可以使用stream_wrapper_register()函数注册自定义封装器。

6.1 file://

用于访问本地文件系统,

6.2 http://

<?php
$url = 'http://www.example.com/redirecting_page.php';

$fp = fopen($url, 'r');

$meta_data = stream_get_meta_data($fp);
foreach ($meta_data['wrapper_data'] as $response) {

    /* Were we redirected? */
    if (strtolower(substr($response, 0, 10)) == 'location: ') {

        /* update $url with where we were redirected to */
        $url = substr($response, 10);
    }

}

?>


6.3 php://

PHP提供了一些IO流以供访问PHP自己的输入和输出流,如php://stdin  php://stdout php://stderr,其允许在PHP进程中直接访问各种流。流引用只是一个复本。stdin为只读,dtdout与stderr为可写的。

php://fd支持直接访问指定的文件描述符

php://memory 与php://temp 允许存储临时数据并以文件的方式访问之。

<?php
$file = fopen("php://stdout","rw");
fwrite($file,"hello world\n");
?>


此外还有其他的如ftp:// zlib:// ssh2://  rar:// ogg://等等。

PHP Misc PHP作为一种成熟的Web开发语言,具有悠久的历史和丰富的生态系统。在本文中,我们简要介绍了PHP的历史、特点、常用库和框架,以及其在现代Web开发中的应用。通过学习和掌握PHP,开发者可以轻松地构建各种类型的Web应用程序。PHP是一种广泛使用的开源服务器端脚本语言,它主要用于开发动态网站和应用程序。本文将探讨PHP的一些杂项内容,包括其历史、特点、常用库和框架,以及其在现代Web开发中的应用。## PHP的历史与特点PHP的起源可以追溯到1995年,由Rasmus Lerdorf开发。 阅读详情

相关推荐

PHP编程中的实用函数与技巧

本章介绍了PHP中一些实用的函数和功能,涵盖杂项、网络、输出缓冲、语言分词器、选项/信息、程序执行和会话处理等方面。通过阅读本章,读者将了解如何使用各种PHP函数以实现更高效、安全的编程实践。

weixin_36184718的博客 711

php 杂项函数

做php也一段时间了,但是有的函数看到还是感觉很生疏,所以把看到的总结一下,以后方便查询杂项函数 exit: 输出一个消息并且退出当前脚本 *

勿忘初心 430

PHP函数分类与用途详解

本文详细解读了PHP编程语言中各类函数的分类和用途。从杂项函数、网络操作、输出缓冲、语言分词器到程序执行和会话处理等,深入剖析了各个函数的功能及其在编程中的实际应用,旨在帮助开发者更好地理解和运用PHP标准库中的丰富工具。...

weixin_29867767的博客 440

PHP2Go:用Go语言实现PHP函数的开源项目

在编程的世界里,我们总是需要在不同语言之间转换和复用代码。PHP2Go就是一个这样的开源项目,它使用Go语言实现了PHP的常见内置函数,为我们提供了极大的便利。下面,让我为您详细介绍这个项目。 ## 项目介绍 PHP2Go是一个开源项目,旨在用Go语言实现PHP的常见内置函数。目前,该项目已经实现了140+个PHP函数,涵盖了日期时间、字符串、多字节字符串、URL、数组、数学、安全随机数、目录...

gitblog_00657的博客 527

深入理解PHP:函数、网络、输出缓冲与执行控制

本文详细解读了PHP编程中的核心概念,包括函数的使用、网络编程的操作、输出缓冲机制以及程序执行的控制方法。通过章节内容的深入分析,我们不仅学习到了具体的函数如何工作,还理解了它们在实际开发中的应用。这些知识点对于任何PHP开发者来说都是基础且重要的。

weixin_42518874的博客 386

Cursor集成Claude 4.6免费版:本地IDE合规调用指南

大语言模型编程助手(LLM Copilot)已成为现代开发标配,其核心能力依赖于上下文理解、代码推理与结构化输出等关键技术原理。Anthropic官方提供的Claude系列模型,尤其Claude 4.6,凭借200K超长上下文、tool use函数调用和严格可控的API设计,在工程实践中展现出显著技术价值。该能力可无缝嵌入本地IDE环境,支撑代码解释、跨文件分析、单元测试生成等高频开发场景。本文聚焦Cursor这一开源可审计IDE,详解如何合规复用Anthropic免费tier接口(/v1/messages

weixin_34095889的博客 536

php杂项

php用于制作游戏充值模块,学习笔记。

Abel's Blog 504

Android TV开发:RecyclerView焦点控制实践与优化

在Android TV应用开发中,焦点控制是提升用户体验的关键技术。不同于移动端触摸交互,TV端通过遥控器方向键导航,需要精确的焦点管理机制。RecyclerView作为动态列表的核心组件,其焦点控制涉及视图复用、导航逻辑和视觉反馈等核心技术点。通过合理配置focusable属性、自定义焦点查找算法以及优化动画性能,开发者可以解决TV端常见的焦点跳转异常、视觉反馈延迟等问题。特别是在视频点播、智能家居控制等场景中,良好的焦点控制能显著提升操作效率。本文结合网格布局焦点环绕、分页加载焦点保持等实战案例,深入解

weixin_34195142的博客 468

【2024最新版】网络安全学习路线-适合入门小白

网络安全小白必看,这是我自己亲身学习网络安全的路线,希望能够帮到大家,我不是大牛,但我也希望能够帮助一些网安小白找到自己学习的方向

星河梦瑾的博客 2314

当迁移学习遇见室内定位:基于UJIIndoorLoc的跨场景适配实践

本文探讨了迁移学习在跨建筑室内定位中的应用,重点解析了UJIIndoorLoc数据集的特性及其在解决设备差异和环境变化中的关键作用。通过特征工程、迁移学习策略和小样本微调技术,显著提升了定位模型的跨场景适配能力,为实际部署提供了有效解决方案。

weixin_29038155的博客 394

新四化浪潮下,中年整车诊断工程师的黄金突围路

摘要 本文探讨了汽车电子诊断工程师在当前行业变革中的独特优势与发展路径。作者作为从业者指出,整车诊断岗位在汽车"新四化"浪潮中呈现"逆生长"特性:技术壁垒高、经验复利强、市场需求持续增长。中年工程师凭借丰富的案例积累和实战经验成为行业稀缺人才,薪资水平显著高于同龄段其他技术岗位。文章分析了四条职业发展路径(技术专家、技术管理、细分深耕、横向拓展),并警示了三大职业风险(执行层局限、技术停滞、成果沉淀不足)。最后提出具体建议,强调掌握UDS高阶、DoIP以太网诊断等核心技术的重要性,为中年技术人提供了清晰的职

Soly_kun的博客 308

PHP相关杂项知识

php -h可以获取帮助信息。PHP版本号信息:/your_current_path/php -v,PHP运行脚本:/your_current_path/php your_file_path,PHP运行语句/your_current_path/php -r your_code_snippet。代码执行结束后,PHP会根据具体执行情况自动的释放,如果执行过程中内存消耗较大,可以利用NULL或

KNIGHTRCOM(rcom10002的专栏) 841

硬件原理图:从软件思维到硬件接口的嵌入式开发破局指南

本文为软件开发者提供了读懂硬件原理图的嵌入式开发破局指南。文章将硬件原理图类比为“硬件系统的架构图”,引导读者将软件API调用思维迁移到硬件接口理解上,详细解析了电阻、电容、二极管等常见元器件的“硬件API”功能与选型逻辑,并通过实战电路拆解,阐述了从原理图分析到驱动代码编写的完整思维链条,帮助开发者建立软硬件协同的系统级视角。

lg888的博客 493

php学习计划

原则:资深的工程师往往都会有意识的培养自己的技能树的,围绕少数核心技能/兴趣来有方向有计划的学习和参与项目。 原则:只看国外的,只用Google,只用英文. 一般用图灵的技术书籍。 英文文档: 多看php手册,学好英文,有什么问题首先看官方英文手册。 做好的程序员,远离百度,使用Google,学会用英语搜索 . 继续英语学习计划,开始尝试英文写作和记录。代码批注等。

andylei 1974

视觉SLAM十四讲--第13讲 实践:设计SLAM系统(最详细的代码调试运行步骤)

最详细的代码调试运行避坑说明,也包含了我自己对代码的理解,如有理解错误的地方,欢迎指正交流。

记录和分享 1万+

机器学习预测材料性能:从特征工程到SHAP可解释性分析

机器学习在材料科学中的应用,核心在于将复杂的材料性能预测问题转化为数据驱动的建模任务。其基本原理是通过算法从历史数据中学习特征与目标属性之间的映射关系。这项技术的价值在于能够大幅加速新材料的发现与设计周期,降低传统“试错法”的高昂成本。在工程实践中,它广泛应用于预测如形成能、带隙、弹性模量以及居里温度等关键材料性能。具体到磁性材料领域,居里温度的准确预测对于永磁体和自旋电子器件设计至关重要。本项目深入探讨了如何利用特征工程从材料成分与结构中构建有效描述符,并借助SHAP这一可解释性工具,揭示模型决策背后的物

weixin_27155667的博客 650

thinkphp杂项功能(主干)

thinkphp杂项功能(主干) 一、总结 1、杂项功能:杂项里面我需要有点印象的是五个:缓存,多语言,图像处理,文件处理,单元测试 二、thinkphp杂项功能(主干) thinkphp扩展杂项功能中不熟悉的还有多语言,文件处理,单元测试 1、多语言 ThinkPHP内置通过\think\Lang类提供多语言支持,如果你的应用涉及到国际化的支持,那么可以定义相关的语言包文...

weixin_33737774的博客 125

如何在Dify中安装运行pandas、numpy库(离线、在线均支持,可提供远程指导)

pandas和numpy这两个库是数据科学和数据分析中经常使用的工具包,原生的Dify无法直接使用这两个库,需要手动安装后才可以使用。本文将介绍如何在Dify中安装pandas和numpy,并在代码执行节点中运行使用pandas和numpy。Dify的代码执行节点中的python逻辑,实际是运行在Dify沙盒中的,因此我们在沙盒中安装pandas和numpy就可以了。如果您有在Dify中添加pandas、numpy的应用需求,欢迎关注作者进行交流。

litlit023的专栏 5633

网络安全学习路线浅谈及各类杂项

本文浅谈网络安全渗透测试学习路线及各类杂项,涵盖就业岗位、安全工具,持续性发展等

gyn2003的博客 1787

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

网络安全学习路线及各类杂项汇总,零基础入门到精通,收藏这篇就够了_网安学习

Web安全:学习Web应用的工作原理和常见的Web安全漏洞,常见攻击类型:了解常见的网络攻击类型owasp top 10的漏洞逻辑原理和复现,以及一些常见的web漏洞,包括但不限于:SQL注入、XSS、CSRF、反序列化、URL重定向、XXE、SSRF、远程命令执行、任意文件读取、JSONP、文件包含、文件上传、CORS、越权等…**红队:**模拟攻击者行为的一组专业人员。**蓝队:**在网络安全领域中,通常指的是负责保护组织网络安全的团队,其任务是防御和响应网络攻击,保护组织的信息系统和数据不受侵害。

bdfcfff77fa的博客 1062

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

php://stdout

Input/output streams

临曦暮雨的小屋 1627

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

PHP 手册 语言参考 支持的协议和封装协议

PHP 手册 语言参考 支持的协议和封装协议 Change language:               English             Brazilian Portuguese              Chinese (Simplified)              French              German             Ja

AI 前沿技术实战博客:LLM / Agent / AI 制药 / 生信四大栏目日更,硬核干货 + 可复现代码,看完就能上手 840

杂项:SQLite

ylbtech-杂项:SQLite SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操...

weixin_30611509的博客 213

杂项

1、数据库时间处理。 'FROM_UNIXTIME(ctime,"%Y-%m-%d %H:%i:%s") as ctime', 2、PHP面向对象。 类、属性和方法:需要添加 abstract 或 final 声明时, 必须写在访问修饰符(public、protected、private)前,而 static 则必须写在其后。 static 修饰符,它被用来控制变量的存储方式和可见性。 ...

Austin_奥斯丁 229
上一篇: PHP学习之五:命名空间与异常
下一篇: PHP学习之七:扩展函数库-文件系统、进程与网络
zzulp
博客等级 码龄19年 464粉丝 176原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值