Blog
Blog copied to clipboard
h2O's Blog
关于PHP可变变量 =============== 在开发一个Api的时候, 同样的代码, 在本地 (PHP 7.0) 和服务器 (PHP 5.4) 运行, 结果却不一样. 代码如下(截取关键部分): ```PHP if ( ! empty($flag) && $flag != $$key ) { $end_index = count($$key) - 1; $$key[$end_index]...
foreach 空数组 ============== 在研究`monolog`源码的时候, 发现了一个有趣的东东, 特此记录一下. 在`monolog`的`Logger.php`文件大概332行左右, 发现了如下一段代码: ```php foreach ($this->processors as $processor) { $record = call_user_func($processor, $record); } ``` 根据追踪的代码看来, `$this->processors`是一个空数组, 那么上面的这段代码有何作用呢? 对此, 打了个断点. ```php echo 1 . PHP_EOL;...
数组单双引号赋值 ================ 数组的单双号赋值是有所区别的, 看如下代码: ```php foreach (['\r', "\r"] as $v) { var_dump($v); } ``` 输出: ``` string(2) "\r" string(1) " " ``` 明显同单个变量赋值一样, 是区分单, 双引号的. `'\r'`(单引号)是强引用, 直接就是字符串. `"\r"`(双引号)是弱引用, 会进行轉义. 详细查看PHP手册:...
之前一直都在使用session和cookie做登陆,购物车等功能;但,没有深入理解其中的机制原理,所以便有了这篇*转载文章*。 #### 什么是cookie #### > Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。 > Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器。 > 网络服务器用HTTP头向客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文件,它会自动将同一服务器的任何请求缚上这些cookies 。 **具体来说cookie机制采用的是在客户端保持状态的方案。它是在用户端的会话状态的存贮机制。** 每次HTTP请求的时候,客户端都会发送相应的Cookie信息到服务端。 实际上大多数的应用都是用 Cookie 来实现Session跟踪的,第一次创建Session的时候,服务端会在HTTP协议中告诉客户端,需要在 Cookie 里面记录一个Session ID,以后每次请求把这个会话ID发送到服务器,我就知道你是谁了。 有人问,如果客户端的浏览器禁用了 Cookie 怎么办?一般这种情况下,会使用一种叫做URL重写的技术来进行会话跟踪,即每次HTTP交互,URL后面都会被附加上一个诸如 sid=xxxxx 这样的参数,服务端据此来识别用户。 正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie。然而纯粹的客户端脚本如JavaScript也可以生成cookie。而cookie的使用是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的cookie,如果某个cookie所声明的作用范围大于等于将要请求的资源所在的位置,则把该cookie附在请求资源的HTTP请求头上发送给服务器。 #### 什么是session #### > **Session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。**...
Flask 学习 ========== 目录 ---- - [项目结构](#项目结构) + [项目的目录结构是如何定义的](#项目的目录结构是如何定义的) + [是否具备入口文件](#是否具备入口文件) - [定义路由](#定义路由) + [如何定义一个URL](#如何定义一个url) - [Request & Response](#request--response) + [获取Request参数(GET, POST)](#获取请求参数) + [定义Url拦截函数(请求钩子)](#定义url拦截函数) + [表单验证(数据过滤)](#表单验证) + [获取/修改/存储Cookie和Session](#如何修改cookie和session) + [请求获取第三方API数据,...
### 在 Arch Linux 下如何安装php扩展 场景 ---- 由于当初的`PHP`是`pacman`安装而不是源码安装的, 并且自己的Arch也好久没滚动更新了, 导致想安装PHP 扩展的时候: ``` $ sudo pacman -S php-sqlite ``` Error 404 找不到下载链接, 毕竟好久没更新系统了. 而且又不是源码安装, 因此不能使用源码安装的办法, 详情请戳[PHP安装扩展](https://github.com/codcodog/Blog/issues/6) 如何安装扩展 ------------ 这里介绍的办法, 同上面的`PHP安装扩展`其实差不多, 只不过是多了几步而已....
之前遇到这样的一个情景: 一个项目在线上运行,由于当时没有把SESSION存放在Memercached/Redis上,也没有放在数据库中,而是直接生成文件存放在服务器上。 本来是没有什么问题的,但由于注册人数过多,导致生成了大量的session文件,那个存放session的目录下有几千个session文件,从而导致服务器来取session文件时,(在一个目录下检索几千个小文件)系统崩溃,把整个线上程序都拖垮了。 所以,现在在这里记录下,SESSION存放在数据库的一个方法。 主要用到 `session_set_save_handler()` 和 `SessionHandlerInterface`。 不多说,看代码。 这是自定义类来处理SESSION ``` /** Implementing SessionHandlerInterface is mandatory as of PHP 5.4 * and will fail in previous versions. */ class DBHandler...
用ssh远程登陆服务器的时候,出现这个报错: > ssh_exchange_identification: read: Connection reset by peer 但是,其他人登陆却可以,只有用公司网络的登不上去。 于是,登陆了另外一个台服务器A,中转下,在A服务器ssh服务器B(在公司网络登不上去),如其愿登陆上去了。 然后,在服务器B上排查下。查看日志`/var/log/auth.log`发现,没有这个文件。也就没法确切定位登陆失败的原因了。 又看了下`/var/log/secure`,没有发现什么有用的信息。 Google了下,据说是ip被禁止的原因。然后去查看`/etc/hosts.allow`和`/etc/hosts.deny`,发现`hosts.allow`里没有信息,于是把自己公司ip(外网ip)加进去了。 ``` sshd:23.105.194.*:allow ``` `service sshd restart`重启,然而发现并没有作用,还是登陆不上去。 (PS: 当`hosts.deny`和`hosts.allow`同时设置ip的时候,以`hosts.allow`为准) 然后查看`hosts.deny`发现里面有很多ip被禁止的。`grep`了一下,没有找到自己公司的ip,好奇怪。 这边同事又催着要登陆,然后我把`hosts.deny`文件清空,发现可以登陆了。 ``` # cat /dev/null > /etc/hosts.deny ```...
> 把ThinkPHP的 URL_MODEL 设置为 2 'URL_MODEL' => '2', //URL模式 > Nginx rewrite 配置: location / { if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=$1 last; break; } } > 如果你的ThinkPHP安装在二级目录,Nginx的伪静态方法设置如下,其中tp是所在的目录名称 location...
因为项目中某个功能,需要修改项目中公共模块里的配置文件config.php,它的位置在 *www/wenda(项目名称)/Application/Common/Conf/config.php* 而我的功能文件在 *www/wenda/Application/Admin/Controller/RewardController.class.php* 在TP中,整个目录结构(在项目wenda文件夹下)是这样的: Application ——Admin ——Home ——Common Public ThinkPHP Uploads index.php 其中,Admin,Home,Common是在Application目录下的。我在*RewardController.class.php*是这样引用*config.php*的: ``` $file = require('../../Common/Conf/config.php'); ``` 结果出现: >require(): Failed opening required '../../Common/Conf/config.php' (include_path='.:/php/includes') >错误位置 >FILE: /var/www/html/wenda/Application/Admin/Controller/RewardController.class.php LINE:...