PHP-CPP官方文档中文版 – 输出(output)与错误(error)

输出与错误你可以使用C++中常规的流类库,比如一些常规的操作符 << 和特殊的功能 std::endl。然而,并不推荐使用'std::out'和'std::err'。当PHP以Web服务模块运行的时候,使用'std::out'的输出信息会直接输出到当初启动PHP的进程的终端中。在生产环境中,这种终端不是活跃状态的,所以任何以'std::out'发送出去的信息都会被丢掉。因此,在以Web模块方式运行的扩展中,使用'std::out'是无法进行的(no-go)。但是,尽管PHP将以命令行脚本(Cli script)的方式('std::out'可以正常使用),仍然不建议你直接使用'std::out'。使用'std::out'会被所有的已经在PHP用户脚本中定义的输出机制忽略(output handler)。可以利用PHP-CPP库中提供的'Php::out' stream包来取而代之。这个'Php...阅读全文

PHP-CPP官方文档中文版 – PHP如何加载扩展

也许你知道,在类unix系统中,原生的PHP扩展需要编译成.so文件,而在Windows系统中,会编译成.dll文件,编译之后,全局php.ini文件会包含着系统中可用的扩展列表。也就是说,创建一个扩展并让PHP加载的话,需要生成一个.so或者.dll文件,然后更新PHP配置文件。启动函数get_module(在讲述如何创建你自己的扩展之前,我们先来看看PHP是如何加载扩展的。当PHP启动时,它会从配置目录下加载*.ini配置文件,并且读取配置文件中类似"extension=name.so"的每一行,相应地打开每一个库调用其中的"get_module()"方法。因此,每一个扩展(你的扩展也不例外)库都需要定义且实现”get_module()"函数。这个函数会在PHP加载扩展库后调用(and thus way before pageviews are handled),然后需要返回一个内存...阅读全文

Cookie和Session的那些事儿

Cookie和Session都是为了保持用户的访问状态,一方面为了方便业务实现,另一方面为了简化服务端的程序设计,提高访问性能。Cookie是客户端(也就是浏览器端)的技术,设置了Cookie之后,每次访问服务端,请求中都会带上Cookie;Session是服务端技术,在服务端存储用户的访问信息。使用Cookie传递信息,随着Cookie个数增多和访问量增大,它占用的带宽会越来越大;使用Session保存信息,最大的弱点就是不容易在多台服务器之间共享。1 Cooki通俗地讲,当用户使用HTTP访问服务器时,服务器会将一些键值对信息返回给客户端浏览器,并且给这些数据加一些限制条件,在符合限制条件情况下用户下次访问服务器时,会带上之前设置的Cookie键值对信息。当该用户输入 URL 时,浏览器便会在本地硬盘上查找与该 URL 关联的 Cookie。如果该 Cookie 存在,浏览器便将该 ...阅读全文

PHP-CPP官方文档中文版 – 你的第一个扩展

当你创建自己的PHP-CPP扩展时,同样你不得不编译和部署它。一个正常的PHP脚本仅仅需要拷贝到Web服务上即可部署,但是部署一个扩展需要花费一些精力:你需要一个Makefile文件,一个用于扩展的php.ini文件,当然还有一个实现扩展业务的*.cpp文件。为了让你清楚这些步骤,我们已经创建了一个几乎为空的扩展,但包含了所有这些必须的文件。它包含了一个Makefile文件,配置文件和一个已经实现get_module()调用的主函数文件main.cpp。这些会帮助你快速的开始扩展开发。Makefil上述的EmptyExtension文件中包含了一个详尽描述编译器的Makefile文件。为了满足你的扩展,你需要(简单地)修改下Makefile文件。其中最重要的修改地方就是扩展名称,也许还有INI_DIR配置。Yourextension.in在你的扩展中,除了Makefile文件,还应该有...阅读全文

张小龙深夜解释微信应用号:马化腾如此回复

昨天深夜,微信突然宣布开始内测应用号服务,暂定名为“小程序”,但最终叫什么还没定,可能会叫“微信小程序平台”。微信有了订阅号、服务号、企业号,再加个应用号不是顺理成章的吗?为何还要如此纠结?马化腾亲自揭开了这个谜团。  就在微信应用号(小程序)开始内测的时候,微信之父张小龙在个人朋友圈里解释了它的用途和好处,而在凌晨三点半的时候,马化腾回复道: “苹果不让叫应用号,也许反而是好事。”随后,疑似原DoNews总编洪波开玩笑地回应说:“原来Apple还要垄断应用(App)这个词啊?”显然,如果叫微信应用号,是不太可能通过苹果App Store商店审核的,只能另外改名。至于马化腾为何说改名是好事,暂时没有更确切的说法,有分析认为,“小程序”在HTML和JAVA时代就曾经被使用过,现在微信应用号起名叫“小程序”可以理解为,不沿用公众号的产品和展示形态,成为微信系统的第三方插件,在微信的聊天窗口、朋...阅读全文

感觉前端又要火了,微信小程序(应用号)开发体验

昨天微信小程序(应用号)内测的消息把整个技术社区炸开了锅我也忍不住跟了几波,可惜没有内测资格,听闻破解版出来了今天早上就着原来的项目资源试开发了一下,总结一下体验.总体体验开发效率高,6:40左右破解完IDE,7:20左右点做完了首页和导航栏的布局,微信把觉见的布局都做了封装,比传统的前端开发效率高。前端可以快速上手:熟练的前端可以很快上手,可能只要一小时读文档的时间加一个官方的例子。开发工具难用,很多目录的操作和IDE常见的格式化代码,html配对等功能暂不支持。开发限制了很多前端常见的Dom,window操作,开发的灵活度和难度降低。我没有内测资格,小程序还不能上传体验,只能下载代码本地体验。本文代码放在githu上截图相关资源破解的ID开发资源集合IDE技术栈:NodeWebkit + Reac进入的安装目录:微信web开发者工具package.nwap这个*.nw就能十...阅读全文

广度优先搜索算法队解迷宫问题

面对迷宫问题,求解路径一共有三种方式。分别为:栈解迷宫(深度优先搜索)、递归法(深度优先搜索)与本文提到的队解迷宫(广度优先搜索),有兴趣可以参阅这篇文章。其中,栈指的是堆栈,队指的是队列。搜索中,利用了其堆栈的先进后出和队列的先进先出的特性。其中,前两种算法无法直接求出最短路径,而广度优先搜索会直接求出其最短路径。下面来具体讨论下队解迷宫的问题。问题这个迷宫问题的解答,主要参考了《LINUX一站式编程》中的第12章“栈与队列”的正文和习题。假设有这样一个迷宫,用一个5*5的数组来表示,其中0表示有路可走,1表示无路可走。那么,如何找到一个通路,使得可以从左上角的(0,0)点走到右下角的(4,4)点?迷宫搜索过程其中2代表已经走过的路,故观察2的覆盖流程即算法的运行流程。2 1 0 0 2 1 0 1 0 0 0 0 0 1 1 1 0 0 0 1 *********...阅读全文

PHP-CPP官方文档中文版 – 如何安装PHP-CPP

在使用PHP-CPP来构建自己飞快的、原生的PHP扩展时,首先你不得不在系统上安装PHP-CPP库。幸运的是,对于我们来说(那些使用Linux或者Apple环境的人),这就是小菜一碟。然而,如果你使用的是其他系统,那么你只能靠自己了(you are left on your own)。因为我们(指的是PHP-CPP的开发者),仅使用Linux系统。所以,这也没有任何理由来说明为什么这些库不应该运行在其他平台的言论,仅仅是因为它是由纯C++代码写的。因此,如果你在使用其他的系统,同时一直在设法编译它,那么请告知我们。我们来更新这些安装文档,并包含一些其他平台。下载安装的第一件事是下载源码。你既可以从我们的下载页面下载最新的发布版本,也可以从GitHub中下载最新的开发者版本(work-in-progress)。为了获取最新的GitHub版本,运行如下行的命令$ git clone http...阅读全文

MySQL查询group by用法详解

group by语法可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表。SELECT子句中的列名必须为分组列或列函数。列函数对于GROUP BY子句定义的每个组各返回一个结果。某个员工信息表结构和数据如下  id  name  dept  salary  edlevel  hiredate      1 张三 开发部 2000 3 2009-10-1      2 李四 开发部 2500 3 2009-10-0      3 王五 设计部 2600 5 2010-10-0      4 王六 设计部 2300 4 2010-10-0      5 马七 设计部 2100 4 2010-10-0      6 赵八 销售部 3000 5 2010-10-0      7 钱九 销售部 3100 7 2010-10-0      8 孙十 销售部 35...阅读全文

插入排序(Insertion Sort)

在上篇文章介绍的并归排序(Merge Sort)后,再来了解下插入排序。简介插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。分类排序算法数据结构数组最差时间复杂度最优时间复杂度平均时间复杂度最差空间复杂度总共 ,需要辅助空间记载最早拥有排序概念的机器出现在1901至1904年间由Hollerith发明出使用基数排序法的分类机,此机器系统包括打孔,制表等功能,1908年分类机第一次应用于人口普查,并且在两年内完成了所有的普查数据和归档。 Hollerith在1896年创立的分类机公司的前身,为电脑制表记录公...阅读全文

分治法的经典运用归并排序(Merge Sort)

简介归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法,效率为O(n log n)。1945年由约翰·冯·诺伊曼首次提出。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。分类排序算法数据结构数组最差时间复杂度最优时间复杂度平均时间复杂度最差空间复杂度归并操作归并操作(merge),也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作。归并排序算法依赖归并操作。迭代法申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列设定两个指针,最初位置分别为两个已经排序序列的起始位置比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置重复步骤3直到某一指针到达序列尾将另一序列剩下的所有元素直接复制到合并序列尾递归法原理如下(假设序列共有n个元素)...阅读全文

Java类加载器详解

类加载器是负责将可能是网络上、也可能是磁盘上的class文件加载到内存中。并为其生成对应的java.lang.class对象。一旦一个类被载入JVM了,同一个类就不会被再次加载。那么怎样才算是同一个类?在JAVA中一个类用其全限定类名(包名和类名)作为其唯一标识,但是在JVM中,一个类用其全限定类名和其类加载器作为其唯一标识。也就是说,在JAVA中的同一个类,如果用不同的类加载器加载,则生成的class对象认为是不同的。当JVM启动时,会形成由三个类加载器组成的初始类加载器层次结构1、启动类加载器BootstrapClassLoader是嵌在JVM内核中的加载器,该加载器是用C++语言写的,主要负载加载JAVA_HOME/lib下的类库,启动类加载器无法被应用程序直接使用。2、扩展类加载器Extension ClassLoader该加载器器是用JAVA编写,且它的父类加载器是Boots...阅读全文

Java资源大全中文版(Awesome最新版)

Awesome系列的Java资源整理。awesome-java 就是akullpp发起维护的Java资源列表,内容包括:构建工具、数据库、框架、模板、安全、代码分析、日志、第三方库、书籍、Java 站点等等。业务流程管理套件流程驱动的软件系统构建,中间件。jBPM:非常灵活的业务流程管理框架,致力于构建开发与业务分析人员之间的桥梁。 官网Activiti:新一代的开源 BPM 引擎,核心是基于 Java 的超快速、超稳定的 BPMN 2.0 流程引擎,强调流程服务的可嵌入性和可扩展性。 官网  下载字节码操作编程方式操作字节码的开发库。ASM:通用底层字节码操作和分析开发库。 官网Byte Buddy:使用流式API进一步简化字节码生成。 官网Byteman:在运行时通过DSL(规则)操作字节码进行测试和故障排除。 官网Javassist:一个简化字节码编辑尝试。 官网集群管理在集群内动态管理应用程序的框架。...阅读全文