MAC通过MacPorts配置 PHP54+PHP FPM+NGINX+MYSQL5.5

 更新时间:2016年11月25日 17:04  点击:1466
如果你喜欢在MAC下开发PHP,那么我们可以用MAC OS X下的软件管理系统MacPorts来安装配置php的开发环境 PHP54+PHP FPM+NGINX+MYSQL5.5。

使用MacPorts配置PHP开发环境(PHP54+PHP FPM+NGINX+MYSQL55),首先需要安装port,访问:http://www.macports.org/install.php,直接下载源代码: https://distfiles.macports.org/MacPorts/MacPorts-2.1.3.tar.gz。

安装port:

1. tar xzvf MacPorts-2.1.3.tar.gz  解压

2. cd MacPorts-2.1.3

3. ./configure && make && sudo make install

这样就安装好port了。

4. vi ~/.bash_profile

按i键进入编辑方式,粘下以下文字:

export PATH=/opt/local/bin:$PATH

按ESC键退出编辑方式,按:键再输入wq保存退出。

现在我们就可以很方便地使用port了。

安装php:

1. port info php 列出所支持的php信息,可以根据需要来选对应的版本安装,我选php54这个版本。

2. sudo port install php54 php54-fpm php54-mysql php54-mbstring php54-mcrypt php54-sockets php54-curl 可以根据需要增加或者减少

3. cd /opt/local/etc/php54/

4. sudo cp ./php-fpm.conf.default ./php-fpm.conf

5. sudo cp ./php.ini-development ./php.ini 可以根据需要换成php.ini-production的

6. vi ~/.bash_profile 加上以下内容:

#php-fpm
alias fpm_start='sudo launchctl load -w /Library/LaunchDaemons/org.macports.php54-fpm.plist'
alias fpm_stop='sudo launchctl unload -w /Library/LaunchDaemons/org.macports.php54-fpm.plist'
alias fpm_restart='fpm_stop; fpm_start'

7. 打开个新的命令窗口,输入:fpm_start,php-fpm就开始运行了,可以用top命令查看或者用ps -e | grep php-fpm查看。

这样子php就已经搞定了。

nginx:

1. sudo port install nginx

2. vi ~/.bash_profile 加上以下内容:

# nginx
alias nginx_start='sudo launchctl load -w /Library/LaunchDaemons/org.macports.nginx.plist'
alias nginx_stop='sudo launchctl unload -w /Library/LaunchDaemons/org.macports.nginx.plist'
alias nginx_restart='nginx_stop; nginx_start;'

3. cd /opt/local/etc/nginx/

4. sudo cp fastcgi.conf.example fastcgi.conf 如此类推,把那些以.example为后缀的拷出一份没有.example为后缀的文件来。

5. sudo vi nginx.conf 找到

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 这段,内容改成这样子:

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /opt/local/share/nginx/html$fastcgi_script_name;
include fastcgi_params;
}

其实就是去掉前面的#号和改了一下fastcgi_param SCRIPT_FILENAME /opt/local/share/nginx/html$fastcgi_script_name;

6. nginx_start就可以启动了

7. cd /opt/local/share/nginx/html/

8. vi phpinfo.php 加入以下内容:

<?php phpinfo(); ?>

9. 通过浏览器访问:http://localhost/phpinfo.php 完成。

MYSQL:

1. sudo port install mysql55 再根据安装完成后的内容设置数据库

2. vi ~/.bash_profile 加上以下内容:

#mysql
alias mysql_start='sudo launchctl load -w /Library/LaunchDaemons/org.macports.mysql55-server.plist'
alias mysql_stop='sudo launchctl unload -w /Library/LaunchDaemons/org.macports.mysql55-server.plist'
alias mysql_restart='mysql_stop; mysql_start'

3. mysql_start

4. sudo vi /opt/local/ect/mysql55/my.cnf 注掉# !include /opt/local/etc/mysql55/macports-default.cnf 这一行,再加上: [mysqld_safe] socket = /tmp/mysql.sock, 否则mysql命令可以连接,工具连不上。

array_multisort函数是php自带对二维数据进行排序的函数,下面我们一起来看看多维数组排序 array_multisort函数用法,希望文章能够帮助到各位。


对2维数组或者多维数组排序是常见的问题,在php中我们有个专门的多维数组排序函数,下面简单介绍下:
array_multisort(array1,sorting order, sorting type,array2,array3..)是对多个数组或多维数组进行排序的函数。


第一个参数是数组,随后的每一个参数可能是数组,也可能是下面的排序顺序标志(排序标志用于更改默认的排列顺序)之一:
SORT_ASC - 默认,按升序排列。(A-Z)
SORT_DESC - 按降序排列。(Z-A)
随后可以指定排序的类型:
SORT_REGULAR - 默认。将每一项按常规顺序排列。
SORT_NUMERIC - 将每一项按数字顺序排列。
SORT_STRING - 将每一项按字母顺序排列


简单的情况。有两个数组:


$arr1 = array(1,9,5);
$arr2 = array(6,2,4);
array_multisort($arr1,$arr2);
print_r($arr1); // 得到的顺序是1,5,9
print_r($arr2); // 得到的顺序是6,4,2

我估计两个数组的值自始至终都是对应着的:1对应6,9对应2,5对应4。
我们再加多一个数组看看会怎样:


$arr1 = array(1,9,5);
$arr2 = array(6,2,4);
$arr3 = array(3,7,8);
array_multisort($arr1,$arr2,$arr3);

查看结果,1自始至终都对应6对应3,其它项也是如此。这种对应关系就是手册中所谓的“排序时保留原有的键名关联”。
另外也可以把每个数组想像成数据库表的一列。而对应着的1,6,3为一数据行,9,2,7为另一数据行。。。
array_multisort会先按第一个数组(想像成列)排序,如果第一个数组(列)的值相同,则按第二个数组(列)排序。
具体可以用下面的程式来测试:


$arr1 = array(1,9,5,9);
$arr2 = array(6,2,4,1);
$arr3 = array(3,7,8,0);
array_multisort($arr1,$arr2,$arr3);

可以想像这里$arr3的结果是(3,8,0,7)。

例子

<?php
//php 多维数组排序 array_multisort 的使用
$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);
// 生成排序字段数组
foreach ($data as $key => $row) {
    $volume[$key]  = $row['volume'];
    $edition[$key] = $row['edition'];
}

//根据volume降序,edition升序
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);

//排序后的数组
print_r($data);
exit;

?>

补充:看看两个实际例子:

1、一次对多个数组进行排序:


$num1 = array(3, 5, 4, 3);
$num2 = array(27, 50, 44, 78);
array_multisort($num1, SORT_ASC, $num2, SORT_DESC);

print_r($num1);
print_r($num2);
//result: Array ( [0] => 3 [1] => 3 [2] => 4 [3] => 5 ) Array ( [0] => 78 [1] => 27 [2] => 44 [3] => 50 )


2、对多维数组(以二位数组为例)进行排序:

$arr = array(
    '0' => array(
        'num1' => 3,
        'num2' => 27
    ),
   
    '1' => array(
        'num1' => 5,
        'num2' => 50
    ),
   
    '2' => array(
        'num1' => 4,
        'num2' => 44
    ),
   
    '3' => array(
        'num1' => 3,
        'num2' => 78
    )
);

foreach ( $arr as $key => $row ){
    $num1[$key] = $row ['num1'];
    $num2[$key] = $row ['num2'];
}

array_multisort($num1, SORT_ASC, $num2, SORT_DESC, $arr);

print_r($arr);
//result:Array([0]=>Array([num1]=>3 [num2]=>78) [1]=>Array([num1]=>3 [num2]=>27) [2]=>Array([num1]=>4 [num2]=>44) [3]=>Array([num1]=>5 [num2]=>50))

在php中只要判断字符串1与字符串2之前的一个stripos位置然后再使用substr开始截取就可以了,具体给各位介绍一个例子。

使用方法

 代码如下 复制代码

$keyword=’查找(计组实验)'

$need=getNeedBetween($keyword, ‘(' , ')' ); 那么$need=’计组实验';

先来发一个我在开发的时候经常用到的字符串截取函数。函数完成简单的从字符串($kw)截取两个指定的字符($mark1,$mark2)之间字符串,失败返回0,成功返回截取的字符串。

 代码如下 复制代码

<?php

function getNeedBetween($kw1,$mark1,$mark2){

$kw=$kw1;
$kw=’123′.$kw.’123′;
$st =stripos($kw,$mark1);
$ed =stripos($kw,$mark2);
if(($st==false||$ed==false)||$st>=$ed)
return 0;
$kw=substr($kw,($st+1),($ed-$st-1));
return $kw;
}

?>

PHP in_array() 函数检查数组中是否存在某个值,如果存在则返回 TRUE ,否则返回 FALSE了,非常的好用了,下面我深入来为各位介绍in_array() 函数.

最近在用php写一段代码时,要用到判断某值是否在另外一组值中。而in_array 函数就是用来检查数组中是否存在某个值 。直接通过概念理解比较模糊,可以通过具体例子了解其作用。

语法:

bool in_array( mixed needle, array array [, bool strict] )

参数说明:
参数 说明
needle 需要在数组中搜索的值,如果是字符串,则区分大小写
array 需要检索的数组
strict 可选,如果设置为 TRUE ,则还会对 needle 与 array 中的值类型进行检查

例1:

<?php
$os = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $os)) {
    echo "Got Irix";
}
if (in_array("mac", $os)) {
    echo "Got mac";
}
?>

以上代码的执行结果是:

Got Irix
第二个条件失败,因为 in_array() 是区分大小写的。

例2:

<?php
$europe = array("美国","英国","法国","德国","意大利","西班牙","丹麦");
if (in_array("美国",$europe)) {
echo "True";
}
?>

同上面一样,执行结果为True 。

例3:严格类型检查例子

<?php
$a = array('1.10', 12.4, 1.13);
if (in_array('12.4', $a, true)) {
    echo "'12.4' found with strict check ";
}
if (in_array(1.13, $a, true)) {
    echo "1.13 found with strict check ";
}
?>

其输出结果是:

1.13 found with strict check

例4:数组中套用数组

<?php
$a = array(array('p', 'h'), array('p', 'r'), 'o');
if (in_array(array('p', 'h'), $a)) {
    echo "'ph' was found ";
}
if (in_array(array('f', 'i'), $a)) {
    echo "'fi' was found ";
}
if (in_array('o', $a)) {
    echo "'o' was found ";
}
?>

其输出结果为:

  'ph' was found
  'o' was found
其具体用法如下:

bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )
在 haystack 中搜索 needle,如果没有设置 strict 则使用宽松的比较。

注:自php5.4以后。数组定义由array()换成了array[] 。

网站或者广告联盟为了追踪用户访问记录,利用cookie是一个比较方便的技术实现,但是现在网民越来越关心cookie带来的隐私问题,那么现在一种新的技术“帆布指纹识别”或许可能替代。

【前言】

一般情况下,网站或者广告联盟都会非常想要一种技术方式可以在网络上精确定位到每一个个体,这样可以通过收集这些个体的数据,通过分析后更加精准的去推送广告(精准化营销)或其他有针对性的一些活动。Cookie技术是非常受欢迎的一种。当用户访问一个网站时,网站可以在用户当前的浏览器 Cookie中永久植入一个含有唯一标示符(UUID)的信息,并通过这个信息将用户所有行为(浏览了哪些页面?搜索了哪些关键字?对什么感兴趣?点了哪些按钮?用了哪些功能?看了哪些商品?把哪些放入了购物车等等)关联起来。

而随着网民对个人隐私的重视,Cookie越来越不受待见。不少安全工具甚至是浏览器都开始允许或引导用户关闭Cookie功能,比如很多主流浏览器都有一个“隐私模式浏览”功能。这样以来,网站就很难追踪用户行为了。但仍然有一些方法可以让网站去追踪每一个访问者的行为,比如通过flash cookie的方式也可以达到唯一标识和追踪的目的。

笔者近期注意到,国外媒体报道了一种非常难以摆脱的新型在线追踪工具被用来尾随从白宫官网到色情网站YouPorn.com的热门网站的访问者。经过分析,这个就是另一种比较新的访客追踪技术:“帆布指纹识别”技术,具体代码见附录6。这个技术的独特之处是:它不像通过Cookie或者Flash Cookie等之类的方式,你基本是无法屏蔽它的。

【原理分析】

笔者收集整理了很多知名站点上的类似代码,详见附录4,从这些“帆布指纹识别”代码可以看出,均使用到了HTML5专属标签的一个现状:在绘制canvas图片时,同样的canvas绘制代码,不同机器和浏览器绘制的图片特征是相同并且独一无二的,这样以来,提取最简单的md5值便可以唯一标识和跟踪这个用户。

产生canvas元素,获取绘画的内容,需要使用到canvas.toDataURL()方法,该方法返回的是图片内容的base64编码字符串。对于PNG文件格式,以块(chunk)划分,最后一块是一段32位的CRC校验,提取这段CRC校验码便可以用于用户的唯一标识:

function bin2hex(s) {
    var i, l, o = '', n;
    s += '';

    for (i = 0, l = s.length; i < l; i++) {
            n = s.charCodeAt(i) .toString(16);
            o += n.length < 2 ? '0' + n : n;
    }

    return o;
}

 

var canvas = document.createElement(‘canvas’);
var ctx = canvas.getContext(’2d’);
var txt = ‘http://chenpeng.info/’;
ctx.textBaseline = “top”;
ctx.font = “14px ‘Arial’”;
ctx.textBaseline = “chenpeng.info”;
ctx.fillStyle = “#f60″;
ctx.fillRect(125,1,62,20);
ctx.fillStyle = “#069″;
ctx.fillText(txt, 2, 15);
ctx.fillStyle = “rgba(102, 204, 0, 0.7)”;
ctx.fillText(txt, 4, 17);
var b64 = canvas.toDataURL().replace(“data:image/png;base64,”,”");
var bin = atob(b64);
var crc = bin2hex(bin.slice(-16,-12));
console.log(crc);

ab99cca6

chrome隐身模式测试:

 

image

 

同一机器的chrome浏览器,无论正常模式还是隐身模式,得到的crc值始终一致。而对于不同机器得到的值是不同的,追踪效果显而易见。

看到这里,相信很多人想问,Why?为什么会出现这样的情况?同样的js代码,在不同设备的浏览器上,结果是唯一并且各不相同的。这到底是为什么?其实原因很简单,同样的HTML5 Canvas元素绘制操作,在不同的操作系统不同的浏览器上,产生的图片内容其实是不完全相同的。出现这种情况可能是有几个原因:

1、在图片格式上,不同web浏览器使用了不同的图形处理引擎、不同的图片导出选项、不同的默认压缩级别等。

2、在像素级别来看,操作系统各自使用了不同的设置和算法来进行抗锯齿和子像素渲染操作。

因此,即使是相同的绘图操作,最终产生的图片数据在hash层面上依然是不同的。这个具体代码层面,恐怕要去搞懂各个主流浏览器的实现和以及操作系统的渲染。笔者精力所限,短期很难给出。大家可以自行摸索下,欢迎交流J

【后话】

HTML5千变万化,利用canvas 这一特性来实现用户追踪,目前并没有好的对抗方案,未来也只能依靠广大浏览器厂商自行了断,实现canvas绘图机制的随机化或许可以很好的保护用户隐私,防止被追踪。

文中涉及到的代码和技术细节,只限用于技术交流,切勿用于非法用途。另外,如果想要研究更多的用户追踪技术,推荐去研究下大名鼎鼎的专注于访客追踪的开源项目:evercookie【附录5】,这个猥琐的小工具,通过几乎所有你想到和想不到的方式(Cookie、Flash、 Silverlight、Web History、HTTP ETags、Web cache、window.name caching、userData storage、HTML5、甚至是java的漏洞等)来跟踪访问网站的用户行为。

[!--infotagslink--]

相关文章

  • IntelliJ IDEA2021.1 配置大全(超详细教程)

    这篇文章主要介绍了IntelliJ IDEA2021.1 配置大全(超详细教程),需要的朋友可以参考下...2021-04-18
  • Windows VPN服务器配置图文教程 超详细版

    VPN可以虚拟出一个专用网络,让远处的计算机和你相当于处在同一个局域网中,而中间的数据也可以实现加密传输,用处很大,特别是在一些大公司,分公司处在不同的区域。...2016-01-27
  • Tomcat配置及如何在Eclipse中启动

    这篇文章主要介绍了Tomcat配置及如何在Eclipse中启动,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-04
  • Laravel4安装配置的方法

    如果我们需要安培Laravel4的话最php最低要求要在php5.3.7版本并且我们需要把mcrypt与openss这两个扩展开启才可以,具体步骤我们参考下文。 前面我们介绍我了 com...2016-11-25
  • 详解Maven profile配置管理及激活profile的几种方式

    这篇文章主要介绍了详解Maven profile配置管理及激活profile的几种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-26
  • 配置vue全局方法的两种方式实例

    vue项目中有一些方法需要在多个页面调用,但为了避免在每个页面都import进来,可以把方法加到原型上去,这样在每个组件中都能使用了,下面这篇文章主要给大家介绍了关于配置vue全局方法的两种方式,需要的朋友可以参考下...2021-09-13
  • IDEA如何添加配置文件到classpath中

    这篇文章主要介绍了IDEA如何添加配置文件到classpath中,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-09-19
  • 查找php配置文件php.ini所在路径的二种方法

    通常php.ini的位置在:复制代码 代码如下:/etc目录下或/usr/local/lib目录下。如果你还是找不到php.ini或者找到了php.ini修改后不生效(其实是没找对),请使用如下办法:1.新建php文件,写入如下代码复制代码 代码如下:<?phpe...2014-05-31
  • 部署PHP时的4个配置修改说明

    以下就是部署PHP时的4个配置修改说明,大家一个一个进行学习研究。1、short_open_tag 是什么呢? 决定是否允许使用代码开始标志的缩写形式(<&#63; &#63;> )。如果要和 XML 结合使用PHP,可以禁用此选项以便于嵌入使用<&#63;x...2015-10-21
  • Centos5.5中安装Mysql5.5过程分享

    这几天在centos下装mysql,这里记录一下安装的过程,方便以后查阅Mysql5.5.37安装需要cmake,5.6版本开始都需要cmake来编译,5.5以后的版本应该也要装这个。安装cmake复制代码 代码如下: [root@local ~]# wget http://www.cm...2015-03-15
  • 华为畅享20Pro配置怎么样?华为畅享20Pro参数配置分析

    华为畅享20Pro配置怎么样?对于即将上市的华为畅享20 Pro手机,很多的网友们也是相当关注的,大家都想要知道这款华为畅享20 Pro手机的配置到底怎么样,赶紧看看吧...2020-06-29
  • Vue-Router的routes配置详解

    在使用vue-router的项目中,实例化VueRouter是其配置选项routes该选项指定路由与视图的组件的关系或者路由与其他路由的关系,Router配置选项中是其中最重要的配置。本文就详细的介绍一下...2021-10-25
  • 详解element-ui 表单校验 Rules 配置 常用黑科技

    这篇文章主要介绍了element-ui 表单校验 Rules 配置 常用黑科技,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-11
  • tomcat9 下载安装和配置+整合到eclipse的教程详解

    这篇文章主要介绍了tomcat9 下载安装和配置+整合到eclipse,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-28
  • pytest配置文件pytest.ini的详细使用

    这篇文章主要介绍了pytest配置文件pytest.ini的详细使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-17
  • 小记一次mysql主从配置解决方案

      今天研究了个开源项目,数据库是mysql的,其中的脚本数据需要备份,由于本人的机器时mac pro,而且mac下的数据库连接工具都不怎么好用,就想着如何利用windows下的数据库连接工具使用,并做相关备份,另外windows系统下的sqlyo...2015-10-21
  • mysql(master/slave)主从复制原理及配置图文详解

    这篇文章主要介绍了mysql(masterslave)主从复制原理及配置图文详解,以前脚本之家小编发过相关的内容,但这么好的非常少见特分享一下,需要的朋友可以参考下...2016-06-12
  • 微信小程序 开发之全局配置

    这篇文章主要介绍了微信小程序 开发之全局配置的相关资料,需要的朋友可以参考下...2017-05-09
  • vue配置多代理服务接口地址操作

    这篇文章主要介绍了vue配置多代理服务接口地址操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-09-08
  • 关于springboot中nacos动态路由的配置

    这篇文章主要介绍了springboot中nacos动态路由的配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-11