月度归档:2016年10月

php switch case里面80%php程序员不知道的秘密

先给大家列一段代码:

$i = 0;
switch ($i) {
    case 0;
        echo "i equals 0";
    case 1:
        echo "i equals 1";
    case 2:
        echo "i equals 2";
}

这个是php官方手册的代码,请问大家,最后结果是什么?

i equals 0i equals 1i equals 2

上面就是执行的结果。

你可能会疑问?

官方解释是这样的。

为避免错误,理解 switch 是怎样执行的非常重要。switch 语句一行接一行地执行(实际上是语句接语句)。开始时没有代码被执行。 仅当一个 case 语句中的值和 switch 表达式的值匹配时 PHP 才开始执行语句,直到 switch 的程序段结束或者遇到第一个 break 语句为止。如果不在 case 的语句段最后写上 break 的话,PHP 将继续执行下一个 case 中的语句段。

php官方介绍:http://www.php.net/manual/zh/control-structures.switch.php

w3c官方介绍:http://www.w3school.com.cn/php/php_switch.asp

工作原理:

  • 对表达式(通常是变量)进行一次计算
  • 把表达式的值与结构中 case 的值进行比较
  • 如果存在匹配,则执行与 case 关联的代码
  • 代码执行后,break 语句阻止代码跳入下一个 case 中继续执行
  • 如果没有 case 为真,则使用 default 语句
本文已经被查看548次

phpstorm 使用git bash terminal终端

以前一直在使用git bash终端,每次需要进入项目中进行git命令操作,需要打开资源管理器找到项目文件夹然后在里面进行操作,相对来比较麻烦。

想到phpstorm当中有用terminal终端,发现使用的是windows系统自带的cmd命令终端,不能执行git相关命令操作。

发现phpstorm可以设置执行终端。

修改方法如下

File -> Settings -> Tools -> Terminal

设置shell_path"F:\Program Files\Git\bin\sh.exe" --login -i这里注意路径两侧的双引号,如果去掉打开终端会报错。

具体每台电脑安装的git路径不一样,请自行根据git安装情况进行路径设置。

20161021001602

然后打开phpstorm进行尝试吧!

terminal终端界面

本文已经被查看1,449次

yum 报[Errno 12] Timeout on错误

今天在用阿里云服务器进行yum update的时候,怎么更新都会报错,curl直接请求yum源可以正常访问,但是进行yum进行更新报错日志如下:
http://mirrors.aliyun.com/centos/7/os/x86_64/repodata/repomd.xml: [Errno 12] Timeout on http://mirrors.aliyun.com/centos/7/os/x86_64/repodata/repomd.xml: (28, 'Connection timed out after 3001 milliseconds')
Trying other mirror.
http://mirrors.aliyuncs.com/centos/7/os/x86_64/repodata/repomd.xml: [Errno 12] Timeout on http://mirrors.aliyuncs.com/centos/7/os/x86_64/repodata/repomd.xml: (28, 'Connection timed out after 3001 milliseconds')
Trying other mirror.

经过google,发现有遇到同样问题的,解决方案是修改/etc/yum.conf文件,原有文件

[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=5
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release

proxy=http://52.34.225.218:8083
#  This is the default, if you make this bigger yum won't see if the metadata
# is newer on the remote and so you'll "gain" the bandwidth of not having to
# download the new metadata and "pay" for it by yum not having correct
# information.
#  It is esp. important, to have correct metadata, for distributions like
# Fedora which don't keep old packages around. If you don't like this checking
# interupting your command line usage, it's much better to have something
# manually check the metadata once an hour (yum-updatesd will do this).
# metadata_expire=90m

# PUT YOUR REPOS HERE OR IN separate files named file.repo
# in /etc/yum.repos.d
timeout=3

发现有代理proxy,可能是因为此代理访问不通所以导致更新源失败。

只需要将proxy=http://52.34.225.218:8083之前添加#注释掉即可

#proxy=http://52.34.225.218:8083

参考链接地址:http://joeyoung.io/yum-errno-12-timeout-error-work-around/

本文已经被查看13,053次

php如何判断ajax请求

ajax的原理

Ajax的原理简单来说通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面。这其中最关键的一步就是从服务器获得请求数据。要清楚这个过程和原理,我们必须对 XMLHttpRequest有所了解。

更多信息请查看http://www.cnblogs.com/mingmingruyuedlut/archive/2011/10/18/2216553.html

PHP如何判断ajax请求

在jquery框架中,对于通过它的$.ajax, $.get, or $.post方法请求网页内容时,它会向服务器传递一个HTTP_X_REQUESTED_WITH的参数,你可以利用如下方法判断某个请求是ajax请求还是普通请求:

if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') 
{ 
..这是一个ajax请求,然后... 
} 
else { 
..这不是一个ajax请求,然后... 
} 

Yii2判断是否ajax请求

    /**
     * Returns whether this is an AJAX (XMLHttpRequest) request.
     *
     * Note that jQuery doesn't set the header in case of cross domain
     * requests: https://stackoverflow.com/questions/8163703/cross-domain-ajax-doesnt-send-x-requested-with-header
     *
     * @return boolean whether this is an AJAX (XMLHttpRequest) request.
     */
    public function getIsAjax()
    {
        return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] === 'XMLHttpRequest';
    }

laravel判断是否ajax请求

    /**
     * Determine if the request is the result of an AJAX call.
     *
     * @return bool
     */
    public function ajax()
    {
        return $this->isXmlHttpRequest();
    }

    /**
     * Returns true if the request is a XMLHttpRequest.
     *
     * It works if your JavaScript library sets an X-Requested-With HTTP header.
     * It is known to work with common JavaScript frameworks:
     *
     * @link http://en.wikipedia.org/wiki/List_of_Ajax_frameworks#JavaScript
     *
     * @return bool true if the request is an XMLHttpRequest, false otherwise
     */
    public function isXmlHttpRequest()
    {
        return 'XMLHttpRequest' == $this->headers->get('X-Requested-With');
    }

这里有一个另外需要注意的问题,就是如果你的jquery请求是通过iframe打开网页的,那么HTTP_X_REQUESTED_WITH参数不会被传递,也就是说你没有办法判断请求的类型。

本文已经被查看605次