nginx+php使用open_basedir限制站点目录防止跨站
方法1)在Nginx配置文件中加入
fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root:/tmp/:/proc/";
通常nginx的站点配置文件里用了include fastcgi.conf;,这样的,把这行加在fastcgi.conf里就OK了。 …
记录-交流-Web开发知识分享
方法1)在Nginx配置文件中加入
fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root:/tmp/:/proc/";
通常nginx的站点配置文件里用了include fastcgi.conf;,这样的,把这行加在fastcgi.conf里就OK了。 …
我们来开门见山地说。 PHP 是一门奇葩的语言。它既不快,语法又不漂亮。还没有遵守良好的软件开发实践。 但我还是使用它开发了很多软件。 那么问题就很明显了 为什么今天还在使用 PHP ?
除了个人理想主义的偏好以外,还有很多理由。这才是我们要讨论的范围。为什么选 PHP 作为我的 Web 开发语言?…
PHP有两个重要的冷门函数:pack
和unpack
。在网络编程,读写图像文件等场景,这两个函数几乎必不可少。鉴于文件读写/网络编程,或者说字节流处理的重要性,掌握这两个函数是迈向高级PHP编程的基础。
本文先介绍字节
和字符
的区别,说明两个函数存在的必要性和重要性。然后介绍基本用法和使用场景,让读者对其有大体了解,为实际使用中奠定基础。…
重大事件:PHP JIT 已进入 PHP RFC,并将在PHP 8.0中实现.
查看 https://wiki.php.net/rfc/jit
以下为翻译:
众所周知,PHP 7的性能跳跃最初是由尝试为PHP实现JIT而启动的。我们在2011年开始在Zend(主要是由Dmitry)开展这些工作,从那时起尝试了3种不同的实现。我们从未提出过发布其中任何一个的建议,主要有三个原因:它们导致典型的Web应用程序没有实质性的性能提升; 它们的开发和维护非常复杂; 我们仍然有其他方向可以探索以提高性能,而无需使用JIT。
尽管支持JIT的PHP的大部分基础都没有改变 - 我们相信今天有一个很好的案例可用于支持JIT的PHP。
首先,我们相信我们已经达到了使用其他优化策略提高PHP性能的能力。换句话说 - 除非我们使用JIT,否则我们无法进一步提高PHP的性能。
其次 -
The 2018 Guide to Building Secure PHP Software!
2018 年将至,一般程序员(特别是 Web 开发程序员)应当抛弃过去开发PHP程序的很多不好的习惯和观念了。虽然部分人不以为意,但是这确实是事实。
这个指南应该以重点部分作为 PHP: The Right Way 安全章节的补充,而不是以一般的 PHP 编程话题。
请在 2018 年使用 PHP 7.2, 并且计划 2019 年初切换到 PHP 7.3。
PHP 7.2 已于 2017 年 11
PHP 7.4 新特性
PHP7.4 新增加了一些非常给力的新特性。在未来很长一段时间内,这无疑是一个非常重大的版本升级。
PHP 7.4可能会在2019年12月发布。此页面将同时定期更新。最后更新时间:2019.5.27.
短封闭允许更简洁的单行函数。
array_map(function (User $user) {
return $user->id;
}, $users)
array_map(fn(User $user) => $user->id, $users)
关于短闭包的一些注意事项:
use
关键字。$this
可以像普通的闭包一样使用。你可以在这里…
启用mysqli报告,捕获PHP程序中未使用索引的查询语句.
使用mysqli_report($flags)函数
在代码开发和测试期间有助于改进查询的函数。根据标志,它报告来自mysqli函数调用或不使用索引的查询(或使用错误索引)的错误。
代码如下
<?php /* 激活报告 */ mysqli_report(MYSQLI_REPORT_ALL); $link = mysqli_connect("localhost", "my_user", "my_password", "world"); /* 检查连接 */ if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } /* 此查询会报告错误 */ $result = mysqli_query("SELECT Name FROM Nonexistingtable WHERE population…
PHP 在不调用构造函数的情况下创建对象
可以利用PHP的反射功能ReflectionClass :: newInstanceWithoutConstructor,实现这一需求。
例子:
<?php class a { public $foo=0; public $bar=9; public function __construct() { $this->foo=1; echo "调用构造函数\n"; } } $ref = new ReflectionClass('a'); $inst = $ref->newInstanceWithoutConstructor(); print_r($inst);
以上输出:
a Object ( [foo] => 0 [bar]…
市面上常见的php框架有很多,最近因为有技术需求,所以对常见的php框架的中间件进行了一些了解。各个框架尽管在目标上对php框架的定义大同小异,但是在实现方式上却各有不同,且看下文:
首先什么是php的中间件?
根据zend-framework中的定义:
所谓中间件是指提供在请求和响应之间的,能够截获请求,并在其基础上进行逻辑处理,与此同时能够完成请求的响应或传递到下一个中间件的代码。
这一介绍十分的简洁,但却略显抽象,接下来我们通过例子来一个个看。
首先来看CI框架,php star数 12830.
作为一款非常简洁的框架,CI被吐槽的不少,但是也有很多人喜欢。首先来看它官方给出的一张请求时序图:
根据上文中对中间件的定义,那么对于CI框架来说,唯一称得上是内置中间件的:Security模块
Security模块是在请求进入controller之前实现的逻辑:
乍看起来,CI框架的中间件十分的局限,但是其实它却提供了无限的可能性。。因为CI中还提供了一个叫做Hooks的功能。即钩子。
下面来看两个个hooks的例子:
定义一个在controller逻辑之前的钩子,并指定钩子的参数、类名或函数名信息:
$hook['pre_controller'] = array(
'class' => 'MyClass',
'function' => 'Myfunction',
'filename' => 'Myclass.php',
'filepath'
<?php header('Content-Type:text/html;charset=utf-8'); //设置编码 /* 创建XML格式的字符串 */ $str = <<<XML <?xml version='1.0' encoding='gb2312'?> <object> <book> <computerbook>PHP从入门到精通</computerbook> </book> <book> <computerbook>PHP项目开发全程实录</computerbook> </book> </object> XML; /* ************************** */ $xml = simplexml_load_string($str); //创建一个simplexml对象 foreach($xml->children() as $layer_one){ //循环输出根节点 print_r($layer_one); //查看节点结构 echo '<br>'; foreach($layer_one->children() as $layer_two){
近期评论