php语句结束标记,PHP结束标记“?”

本问题已经有最佳答案,请猛点这里访问。

我有一个PHP结束标记的有趣现象。 我有一个由Ajax调用执行的php文件。 在php文件中包含了一个具有各种功能的php库文件。 当这个库被包含时,php响应包括一堆空行。 当我从库中删除结束标记时,这种情况就停止了。

任何人都可以向我解释这里发生了什么?

你可能在?>标签后面有一些空行,然后空行被解释为空行。 删除php结束标记时,这些行被视为php代码,并且空的php行不会写入输出缓冲区。

库PHP文件在?>之后有一堆换行符。 它们作为输出直接发送到输出缓冲区,因为它们不会被解释为中的PHP代码。 这是"已发送标头"错误的最常见原因,以及许多框架省略?>的原因。

php.net/manual/en/language.basic-syntax.phptags.php"如果文件是纯PHP代码,最好省略文件末尾的PHP结束标记。这可以防止意外的空格或新行 在PHP结束标记之后添加"

我认为这个回答在另一个类似的问题上是一个完美的答案。

这是有据可查的。从PHP手册:

The closing tag of a PHP block at the end of a file is optional, and in some cases omitting it is helpful when using include() or require(), so unwanted whitespace will not occur at the end of files, and you will still be able to add headers to the response later. It is also handy if you use output buffering, and would not like to see added unwanted whitespace at the end of the parts generated by the included files.

省略结束标记有助于防止意外的空格或换行符添加到文件末尾。

这是PHP的核心功能:与其他语言不同,您需要使用特殊标记(通常为)标记PHP代码,因为其他所有内容都被视为文字输出:

This is not PHP

echo 'This is PHP' . PHP_EOL;

?>

This is not PHP either

D:\tmp>php test.php

This is not PHP

This is PHP

This is not PHP either

尽管手册提到了HTML,但PHP并不真正了解/关心其标签之外的内容类型。

如果您忘记在进一步填充后关闭PHP块,通常会出现语法错误:

This is not PHP

echo 'This is PHP' . PHP_EOL;

This is not PHP either

D:\tmp>php test.php

PHP Parse error:  syntax error, unexpected 'is' (T_STRING) in D:\tmp\borrame.php on line 6

空行是一种特殊情况,因为它们在几乎所有语言(PHP,HTML,CSS,JavaScript ......)中都是有效且几乎不可见的,因此它们经常被忽视。

删除?>标记后,文字空白行已从脚本输出中消失,因为它们已成为PHP代码的一部分(因此,它们已开始被忽略)。

当然,PHP会忽略空行,但不一定是你生成的任何内容,正如我所说,它不需要是HTML:它可以是图片,PDF文档,Excel电子表格。当它是文件的最后一部分时,不关闭最后一个PHP块,可以很容易地避免伪造白线。

今天你不应该在你的PHP中使用echo。 指向MVC,模板系统,框架等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/526011.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php 获取 js json数据类型,JS基础-JS的数据类型和访问/流程控制/JSON格式字符串和js对象相互转换...

JS的数据类型和访问/流程控制/JSON格式字符串和js对象相互转换1. JS的数据类型和访问1.1. 原始类型JS中的原始数据类型有: number , string , boolean ;声明变量使用 var 关键字./* 数字类型 */varyear2020;/* 字符串类型 */varnamezhangsan;/* 布尔类型 */varisUpdatefalse;获…

在matlab中使用spm8,在matlab中同时使用spm2,spm5,spm8

1、设置好spm2,spm5,spm8的路径。例如,都放置在“D:\Analysis_Software”2、新建一个文件夹spm_paths,用于放置调用spm2,spm5,spm8的*.m文件3、将spm_paths在matlab中进行setpath4、调用文件编写如下&#…

matlab 打开软件报错,matlab程序错误,提示如下【弄了半夜还是不行】 - 数学 - 小木虫 - 学术 科研 互动社区...

function [x,y,Y]levydistrintheorytest(t0,lambda,T,a,b);% 计算理论的二维levy分布的图象 画出来的3维曲面图% t0 :levy walk 趋于零的时间% lambda :幂律值% T:时间% a: 离散的大步长的最大值% b:小步长的最大值e…

php 上传根目录不存在,Linux 下 ---ThinkPHP 图片上传提示:上传根目录不存在!请尝试手动创建...

2016年11月15日11:15:47Windows下如果碰到如此问题,要看文件保存根路径里的rootpath,比如ThinkPHP框架里config.php文件里的的参数配置://文件上传相关配置‘UPLOAD_CONFIG‘ > array(‘mimes‘ > ‘‘, //允许上传的文件MiMe类型‘max…

mysql二级缓存,mybatis的动态sql和二级缓存

mybatis的#{}和${}的区别就像是 PreparedStatement 和statement , 使用${}接收的参数还需用Param注解修饰 , 推荐用#{}动态SQLMyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句的痛苦。例如…

mysql查找表shoe table,mysql命令行常用命令

mysql服务的启动和停止net stop mysqlnet start mysql登陆mysql服务器mysql -u用户名 -p用户密码注意,如果是连接到另外的机器上,则需要加入一个参数-h机器IP增加新用户grant 权限 on 数据库.* to 用户名登录主机 identified by “密码”如&#…

java long bigdecimal,通过Java中的long创建BigDecimal值

让我们看看如何通过long创建BigDecimal值。在这里,我们将长值设置为BigDecimal构造函数的参数。BigDecimal val1 BigDecimal.valueOf(289L);BigDecimal val2 BigDecimal.valueOf(299L);我们还可以对其执行数学运算-val2 val2.subtract(val1);以下是一个例子-示例…

python 数据挖掘论文,Orange:一个基于 Python 的数据挖掘和机器学习平台

Orange 简介Orange 是一个开源的数据挖掘和机器学习软件。Orange 基于 Python 和 C/C 开发,提供了一系列的数据探索、可视化、预处理以及建模组件。Orange 拥有漂亮直观的交互式用户界面,非常适合新手进行探索性数据分析和可视化展示;同时高级…

php量表是什么心理量表,心理学中的“5大心理学测评量表”你知道多少?

原标题:心理学中的“5大心理学测评量表”你知道多少?心理学知识中涵盖了类型丰富的心理学测评量表,你知道其中的多少呢?1、《应对方式问卷》《应对方式问卷》由肖计划等人参照国内外应对研究的问卷内容以及有关应对理论&#xff0…

php获取表单内的值,PHP获取表单里各项值总结

表单提交的方式1、GET方式功能:获取get方式提交的数据格式:$_GET[“formelement”]2、POST方式功能:获取post方式提交的数据格式:$_POST[“formelement”]3、REQUEST方式功能:获取任意方式提交的数据格式:$…

php对象魔术方法,php学习之类与对象的魔术方法的使用

原标题:php学习之类与对象的魔术方法的使用魔术方法有哪些__construct:构造方法__destuct:析构方法__call:在对象中调用一个不可访问的方法时。__call()会被调用__callStatic:__get:调用不可访问的属性__se…

oracle 执行sql,Oracle动态执行SQL

方式1CREATE OR REPLACE PROCEDURE demo(salary IN NUMBER) AScursor_name INTEGER;rows_processed INTEGER;BEGINcursor_name : dbms_sql.open_cursor;dbms_sql.parse(cursor_name, DELETE FROM emp WHERE sal > :x,dbms_sql);dbms_sql.bind_variable(cursor_name, :x, sal…

oracle 满足条件取第一行,sql – 如何只选择满足条件的第一行?

您可以使用分析查询:select *from (select p.*, v.*,row_number() over (partition by p.id order by v.userid) as rnfrom prmprofile pjoin user v on v.profile p.idwhere p.language 0and v.userid like %TEST%)where rn 1;内部查询获取所有数据(但使用*不理…

Linux怎么把目录设置群组,linux设置目录和文件使用权限

ext2fs文件系统中的目录及文件,可依实际需要来设置可读取、可写入与可执行等权限。以下我们就来了解文件和目录的权限设置。ext2fs文件系统中的目录及文件,可依实际需要来设置可读取、可写入与可执行等权限。以下我们就来了解文件和目录的权限设置&#…

linux异常关机内存,linux关机及问题解决

一般linux关机会用到的命令就是shutdown命令shutdown命令在执行的时候会自动去调用sync这个工具,这个工具的作用是把内存里面的东西写入硬盘。不过为了安全,一般我们在执行shutdown命令的时候都用去执行几次sync这个命令。shutdown -k noticesshutdown -…

linux查看redis内存,Linux查看redis占用内存的方法

redis-cliauth 密码info# Memoryused_memory:13490096 //数据占用了多少内存(字节)used_memory_human:12.87M //数据占用了多少内存(带单位的,可读性好)used_memory_rss:13490096 //redis占用了多少内存used_memory_peak:15301192 //占用内存的峰值(字节)used_memor…

linux子进程父进程例子,linux 子进程访问父进程

问题分析ECS Linux 系统下 Apache 的默认工作模式是 prefork MPM,使用多个子进程,每个子进程只有一个线程。每个进程在某个确定的时间只能维持一个连接,效率高,但内存占用量比较大。如果不做调整,访问量增大可能造成 A…

linux 查看进程的信号,Linux 进程信号查看与控制

Linux 进程信号查看与控制1) SIGHUP 本信号在用户终端连接 (正常或非正常) 结束时发出通常是在终端的控制进程结束时通知同一 session 内的各个作业这时它们与控制终端不再关联?2) SIGINT 程序终止 (interrupt) 信号在用户键入 INTR 字符 (通常是 Ctrl-C) 时发出?3) SIGQUIT …

linux查看发起ddos攻击的ip,在Linux上使用netstat命令查证DDOS攻击的方法

导读DOS攻击或者DDOS攻击是试图让机器或者网络资源不可用的攻击。这种攻击的攻击目标网站或者服务通常是托管在高防服务器比如银行,信用卡支付网管,甚至根域名服务器。服务器出现缓慢的状况可能由很多事情导致,比如错误的配置,脚本…

linux还原windows,双系统如何删除Linux,恢复Windows从  MBR引导启动?

双系统如何删除Linux,恢复Windows从MBR引导启动?现在愿意尝试Linux的人越来越多了。通常,如果一台电脑里已经装有了Windows,再装Linux,安装时,Linux的grub引导程 序就会覆盖掉保存在MBR当中的原来的Windows…