标签 php 下的文章

PHP:设置Location导致状态码被修改为302

最近在试着做RESTful API,学了很多平时用不到的HTTP知识。在一个API上,我想用409 Conflict表示要创建的资源已经存在。这是一个挺冷门的状态码,在B/S结构中基本上用不到。RFC 2616对它的解释是:

409 Conflict

The request could not be completed due to a conflict with the current
state of the resource. This code is only allowed in situations where
it is expected that the user might be able to resolve the conflict and
resubmit the request. The response body SHOULD include enough
information for the user to recognize the source of the conflict.
Ideally, the response entity would include enough information for the
user or user agent to fix the problem; however, that might not be
possible and is not required.

《RESTful Web APIs》这本书在409 Conflict的解释中写到:

响应报头:如果该冲突是由于某些其他资源的存在(比如,客户端尝试创建的某个特定的资源已经存在了)而造成的话,那么Location报头应该链接到该资源的URL:也就是说,冲突的来源。

- 阅读剩余部分 -

PHP中三元运算符的结合性

春节之后上了两门Coursera课程,又跟集智俱乐部研究了一个多月神经网络,一篇博客都没写完。今天先从一篇短文开始,再慢慢完成之前的一些草稿。

昨天鸟哥在PHP Conference讲到PHP7的AST时,说起PHP的一个历史遗留问题:三元运算符的结合性。PHP的语法是类似于C的,但是在这里却不一样。

- 阅读剩余部分 -

PHP上传文件时$_FILES数组为空

今天在调试上传文件接口的时候发现了一个奇怪的错误,当上传的文件超过一定大小时$_FILES数组会变成空的。仔细研究了一下,发现这还是个挺冷门的错误。原因在于使用Nginx+PHP时,系统中一共有三个上传文件的大小限制:

  1. php.ini 里的 upload_max_filesize
  2. php.ini 里的 post_max_size
  3. nginx.conf 里的 client_max_body_size

- 阅读剩余部分 -

在PHP中生成守护进程(Daemon Process)

前两天看到一篇文章《如何使用PHP编写daemon process》,其中对核心代码却没有细说,我又查了一些资料,还看了一本《理解Unix进程》,才搞明白生成守护进程的时候发生了什么。

这段代码是这个样子的:

function run()
{
    //第一次fork,父进程与子进程在此分开
    if(($pid1 = pcntl_fork()) === 0)
    {
        //子进程在此成为会话组leader
        posix_setsid();

        //第二次fork,子进程与孙子进程在此分开
        if(($pid2 = pcntl_fork()) === 0)
        {
            //孙子进程成为守护进程,开始处理任务
            handle_http_request('www.codinglabs.org', 9999);
        }
        else
        {
            //子进程退出,将孙子进程交由init托管
            exit;
        }
    }
    else
    {
        //父进程在此等待子进程的退出信号
        pcntl_wait($status);
    }
}

- 阅读剩余部分 -