PHP 调用 SHELL 需要注意的地方

最近需要从前端调用系统命令实现一些东西,然后返回到前端来。 思来想去,觉得 html <-> php <-> shell的模式应该不错。从html到php可以用ajax实现动态交互,但php调用shell的这个过程需要注意一些地方。在这里浪费了不少时间。 第一:调用方式 PHP提供共了3个专门的执行外部命令的函数:system(),exec(),passthru()。具体的用法Google一下已经很多了。 第二:权限问题 由于我的web项目是在apache目录下的,但apache并没有足够的权限执行一些诸如mkdir等命令,导致我拔一些东西并储存的时候毫无反应。简单的做法就是修改一下web项目所在目录权限就可以了。 比如 $ chmod -R 777 /home/www/example  

MySQL 插入错误

MySQL insert error。。。。。。。。   一条简单的SQL语句,竟然插入错误: INSERT INTO USER (id, describe) VALUES (‘David’, ‘diudiu’); 咋一看确实没错啊,瞅半天才发现,是由于table中有字段名是MySQL的保留字。这里就是‘describe’,报错也就理所当然了。 解决办法: 在关键字的地方加上反引号”`”,就是键盘1旁边的那个字符。 MySQL就是通过添加反引号来区别保留字。 上述修改为 INSERT INTO USER (id, `describe`) VALUES (‘David’, ‘diudiu’); 即可。    

PHP调用C/C++动态链接库

摘要 有时候,单纯依靠 PHP “本身”是不行的。尽管普通用户很少遇到这种情况,但一些专业性的应用则经常需要将 PHP 的性能发挥到极致(这里的性能是指速度或功能)。由于受到 PHP 语言本身的限制,同时还可能不得不把庞大的库文件包含到每个脚本当中。因此,某些新功能并不是总能被顺利实现,所以我们必须另外寻找一些方法来克服 PHP 的这些缺点。 了解到了这一点,我们就到了应该接触一下 PHP 的心脏并探究一下它的内核——可以编译成 PHP 并让之工作的 C 代码——的时候了。 概述: PHP调用动态链接库几个必要步骤为: 1. C/C++编写动态链接库,编译打包成.so文件 2. 初始化一个新的PHP扩展 3. 配置、编写PHP扩展内容,在扩展中使用C/C++调用.so 4. 编译并添加PHP扩展 5. 在PHP应用中直接调用PHP扩展里暴露出来的API 为了从能运行的最简单的例子开始,所以下面的叙述可能不会严格按照上面列的步骤来写,也有可能会重复穿插着写。但总体顺序是一致的。 一. C/C++编写动态链接库,编译打包成.so文件 如果还不会用C++调用自己写的.so库,请参考我的这篇文章: http://keping.me/cpp_invoke_so/ 文中从什么是Name Mangling开始,到如何用调用一个包含简单函数的so库,再到如何从so中加载类,都有详细叙述,并附有可运行示例代码。 二. 初始化PHP扩展 本文中,我们将创建一个叫“vehicle”的PHP扩展,其中包含一个“Car”类。 将要创建的扩展会涉及到以下文件需要修改,这些文件将会出现在vehicle目录下。后面会一一叙述这些文件是怎么来的,现在只是大致了解一下。 car.h —— 包含了C++写的类,即Car的定义 car.cc —— Car类的具体实现 php_vehicle.h —— 包含了PHP创建扩展所需要的一些头文件,外部变量定义等。 vehicle.cc —— 扩展的主要源码文件,这里面会调用到Car类 config.m4 —— PHP扩展的配置文件 1.… Continue reading PHP调用C/C++动态链接库

PHP与C++性能比较

PHP是速度很快的脚本语言,但是用了框架以后好像感觉挺慢的。于是猜测会不会PHP本身也不是很快。如果不是很快,能否采用PHP调用本地动态链接库的形式来提升速度。 于是有了下面的对比实验。 测试环境 1. 硬件环境如下图所示。 2. 软件环境 系统: Ubuntu 12.10 gcc版本: Thread model: posix gcc version 4.7.2 (Ubuntu/Linaro 4.7.2-2ubuntu1) php版本: PHP 5.3.22 (cli) (built: Mar 14 2013 20:37:16) Copyright (c) 1997-2013 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2013 Zend Technologies php开发环境: LAMP,所有安装包均是通过源码编译安装而成,编译过程中会自动根据本机各项参数进行最优配置。性能比apt-get install命令直接安装好。 关于以源码包方式搭建LAMP请参考文章:http://keping.me/linux-php-dev-by-source-style/ 测试方法 由于冒泡排序在时间复杂度上相当稳定——O(n2),在最大程度上减少了数据可能带来的影响,故采取计算冒泡排序的运行时间的方法来进行此次实验。 对比测试分组 分组1: C++直接调用程序内的函数 分组2: C++调用打包好的动态链接库文件(.so文件,该文件也是自己写好并打包) 分组3: PHP直接调用程序内的函数… Continue reading PHP与C++性能比较

Compile and Install LAMP(Linux/Apache/MySQL/PHP) from source on Ubuntu 12.10

This blog will guide you finish the compiling and installing a LAMP Server from source on Ubuntu step by step. Of course, it will take you a little much time(Thanks for the 15 source packages ) ,so a cup of coffee will be a good choice 🙂 Zeroth. Here follows some source packages, which will… Continue reading Compile and Install LAMP(Linux/Apache/MySQL/PHP) from source on Ubuntu 12.10

Ubuntu下PHP扩展cURL

开发php的时候遇到一个错误, Fatal error: Call to undefined function curl_init() Google了一下,网上基本都是你抄我,我抄你,还不能解决,我勒个擦。还是自己动手吧,结合以前经验,解决方法如下: 0. 前提。我的php开发环境是用源码包编译、安装而成的。并且保留了php的源码包。 1. 安装cURL。 1.1 进入/usr/local/src目录,命令如下: $ cd /usr/local/src 1.2 下载cURL源码包,可以通过命令下载,也可以直接去http://curl.haxx.se/download/选择版本下载,然后copy到该目录。如果是敲命令,如下: $ sudo wget http://curl.haxx.se/download/curl-7.17.1.tar.gz 1.3 配置。在当前目录下执行命令: $ sudo ./configure –prefix=/usr/local/curl 1.4 编译,命令如下: $ sudo make 1.5 安装,命令如下: $ sudo make install 如果安装成功以后,在/usr/local/curl/目录下将生成bin、include、lib和share四个目录。 2. 扩展php。 2.1 进入php源码包(不是安装以后的)位置/ext/curl/目录,我的在/usr/local/src/php-5.3.22/ext/curl,如下图所示 2.2 在当前目录下,通过phpize可以建立php的外挂模块,命令如下: $ sudo /usr/local/php/bin/phpize 其中/usr/local/php/是我的php安装路径,有可能与各位不一样。 2.3 配置扩展,命令如下: $ sudo ./configure –with-php-config=/usr/local/php/bin/php-config… Continue reading Ubuntu下PHP扩展cURL

Ubuntu搭建LAMP环境(jpeg-6b 安装错误 ,找不到libtool命令)

继续安装php开发环境, jpeg-6b make的时候错误: ./libtool –mode=compile gcc -O2 -I. -c ./jcapimin.c make: ./libtool: Command not found make: *** [jcapimin.lo] Error 127 看提示应该是没有安装libtool,由于才拿到手里的服务器,什么都没装,出现这个错误也正常。 解决办法:安装libtool 1 在上面的链接或者网上下载 libtool-2.2.6a.tar.gz,放到/usr/local/src/目录下,解压软件包到当前目录libtool-2.2.6下,并进入libtool-2.2.6目录,命令如下: $ cd /usr/local/usr/                                      // 进入源码包所在目录 $ sudo tar zxvf libtool-2.2.6a.tar.gz       … Continue reading Ubuntu搭建LAMP环境(jpeg-6b 安装错误 ,找不到libtool命令)