www.nginx.cnsitemap

存档

‘php’ 分类的存档

使用php连接oracle

2013年12月22日 2 条评论

要使用php连接oracle,基本条件是
1.需要你安装了php、
2.安装了oracle、
3.配置了tnsname.ora。
本地命令行使用sqlplus能够连接到oracle。

根据你机器的版本选对64bit或者32bit的php程序,我们使用php的oci8扩展连接oracle

安装好php后,打开oci8扩展,

写一段连接oracle的ora.php代码
阅读全文...

分类: oracle, php 标签: , ,

安装好php后找不到php.ini

2013年12月13日 没有评论

很多同学在安装完php后找不到php.ini而烦恼。

通常php.ini的位置在:

/etc目录下或/usr/local/lib目录下。

如果你还是找不到php.ini或者找到了php.ini修改后不生效(其实是没找对),请使用如下办法:

1.新建php文件,写入如下代码

然后在浏览器访问该页面,搜索php.ini,

2.
执行,(需要修改php为你自己的路径)
/usr/local/php/bin/php --ini
会显示php.ini所在路径,路径下没有php.ini文件,
Configuration File (php.ini) Path: /usr/local/php/lib
Loaded Configuration File: (none)
Scan for additional .ini files in: (none)
Additional .ini files parsed: (none)

php.ini位置修改方法如下: php.ini文件缺省放在/usr/local/lib上面,

可以在编译的时候使用--with-config-file-path参数来修改php.ini的存放位置。

例如,
你可以使用--with-config-file-path=/etc
把php.ini存放到/etc下面,然后可以从源码包中拷贝php.ini-dist到/etc/php.ini。

分类: php 标签: ,

php-fpm通过request_slowlog_timeout检查哪个脚本执行时间长

2013年11月21日 3 条评论

很多站长转到nginx+php-fpm后,饱受500,502问题困扰。

当nginx收到如上错误码时,可以确定后端php-fpm解析php出了某种问题,比如,执行错误,执行超时。

php-fpm.conf的配置文件中有一个参数request_slowlog_timeout是这样描述的

; The timeout for serving a single request after which a PHP backtrace will be
; dumped to the 'slowlog' file. A value of '0s' means 'off'.
; Available units: s(econds)(default), m(inutes), h(ours), or d(ays)
; Default Value: 0
;request_slowlog_timeout = 0

当request_slowlog_timeout 设为一个具体秒时request_slowlog_timeout =5,表示如果哪个脚本执行时间大于5秒,会记录这个脚本到慢日志文件中

request_slowlog_timeout =0表示关闭慢日志输出。

慢日志文件位置默认在php的安装目录下的log文件夹中,可以通过修改slowlog = log/$pool.log.slow参数来指定。

php-fpm慢日志的例子,慢日志会记录下进程号,脚本名称,具体哪个文件哪行代码的哪个函数执行时间过长。
[21-Nov-2013 14:30:38] [pool www] pid 11877
script_filename = /usr/local/lnmp/nginx/html/www.quancha.cn/www/fyzb.php
[0xb70fb88c] file_get_contents() /usr/local/lnmp/nginx/html/www.quancha.cn/www/fyzb.php:2

[21-Nov-2013 14:15:23] ERROR: [pool www] 'slowlog' must be specified for use with 'request_slowlog_timeout'

request_slowlog_timeout 和 slowlog需要同时设置,开启request_slowlog_timeout的同时需要开启 slowlog

[21-Nov-2013 14:16:27] ERROR: Unable to create or open slowlog(/usr/local/lnmp/php/log/www.log.slow): No such file or directory (2)

慢日志路径需要手动创建

具体开启php-fpm慢日志步骤:

cd /usr/local/lnmp/php

vi etc/php-fpm.conf
去掉request_slowlog_timeout 、slowlog的前缀分号';',设置request_slowlog_timeout =5;

:wq
保存退出

创建慢日志目录
mkdir log

重启php-fpm
kill -INT `cat var/run/php-fpm.pid
sbin/php-fpm

分类: php 标签: ,

php常用函数

2013年11月18日 没有评论

1.判断变量是否存在且不为空,检查post和get变量时使用。

isset()
empty()

2.判断变量是否是数字

is_numeric():检测是否为数字字符串,可为负数和小数

ctype_digit():检测字符串中的字符是否都是数字,负数和小数会检测不通过

注意,参数一定要是字符串,如果不是字符串,则会返回0/FASLE

3.判断变量是否是数组

is_array()
array系列函数

4.采集网页文本
file_get_contents
curl_exec系类函数

5.判断函数是否存在
function_exists

6.输出页面编码
header("Content-type: text/html; charset=utf-8");

7.正则内容匹配

preg_match()
preg_match_all()

8.字符串查找

strstr()

9.调试

print_r()
var_dump()

分类: php 标签: ,

php相对路径和绝对路径

2013年11月17日 5 条评论

一个好的php代码,无论放到windows还是linux,不同版本的php上,都能正确的输出结果,才是一个好代码。

说起来容易的事,做起来并不是很轻松,很多时候写代码都是功能导向,当前环境,要赶时间立马见效果,基本就是怎么方便怎么来了。

但是为了写出一个好的代码和后期减少调试时间,写每一个代码都要斟酌考虑是否能够适应你所能想到的困难,每次解决一个,日积月累下来,你的代码就会伸缩自如了。

相对路径是对于当前代码文件所在文件夹来说。
绝对路径是相对于根文件夹来说。

当代码需要依赖别的文件时,就需要统一代码的包含路径。

代码执行时出现找不到文件,多数是由于没有定义好路径。

我推荐大家写绝对路径来写程序,相对路径一旦移动后就容易出现找不到要包含的文件。

用到的php函数和常量

dirname
__FILE__
DIRECTORY_SEPARATOR

推荐写一个初始化文件 initialize.php
[php]
<?php
// Define the core paths
// Define them as absolute paths to make sure that require_once works as expected

// DIRECTORY_SEPARATOR is a PHP pre-defined constant
// ( for Windows, / for Unix)
defined('DS') ? null : define('DS', DIRECTORY_SEPARATOR);

defined('SITE_ROOT') ? null : define('SITE_ROOT', dirname(__FILE__));

defined('LIB_PATH') ? null : define('LIB_PATH', SITE_ROOT.DS.'includes');

// load config file first
require_once(LIB_PATH.DS.'config.php');

// load basic functions next so that everything after can use them
require_once(LIB_PATH.DS.'functions.php');

// load core objects
require_once(LIB_PATH.DS.'session.php');
require_once(LIB_PATH.DS.'database.php');

// load database-related classes
require_once(LIB_PATH.DS.'user.php');
[/php]

分类: php 标签: , ,

phpMyAdmin安装配置教程

2013年10月12日 1 条评论

phpMyAdmin安装前提条件:

* PHP 5.2 or later(包含mysqli、mbstring、mcrypt扩展)
* MySQL 5.0 or later
*可用的浏览器

下载安装包,解压即可使用

解压之后就可以直接使用。

把phpMyAdmin拷贝到网站根目录后可以直访问。

例如把phpMyAdmin目录拷贝到www.nginx.cn的根目录后,使用网址http://www.nginx.cn/phpMyAdmin即可访问。

-----------------------------------------------------------------------

如需高级配置,可以修改libraries/config.default.php的如下几个配置。

//这个cookie的加密,密钥,防止模拟cookie破解,最好不要留空
$cfg['blowfish_secret'] = 'a8b7c6d';

//默认是config,不要密码就能进入,换成cookie要输入用户和密码的
$cfg['Servers'][$i]['auth_type'] = 'cookie';

// PHP 5 support for new MySQL 4.1.3+ features:
$cfg['Servers'][$i]['extension'] = 'mysqli';

//是否允许root账户登录
$cfg['Servers'][$i]['AllowNoPasswordRoot'] = true;

或者在phpMyAdmin根目录下创建config.inc.php,不存在新建,已存在用如下内容覆盖。

用浏览器访问phpmyadmin网址,在登录页面输入mysql的用户和密码就能道路到后台了。
phpmyadmin登录页面

更详细的配置可以看这里
http://docs.phpmyadmin.net/en/latest/setup.html#setup
http://docs.phpmyadmin.net/en/latest/config.html

分类: php 标签: ,

通过php安装Imagick扩展给动态gif图片打水印

2013年9月23日 没有评论

一直以来php处理图片都是以gd为主流,直到近些年Imagick的使用才渐渐变多。

gd通常用来缩放图片,给图片打水印等基本功能,对于复杂效果如制作图标按钮、图倒影等滤镜功能就会力不从心。

尤其对于有多帧图片的动态gif图打水印,如果使用gd像处理普通jpg那样去打水印,打完水印后的图片只剩下第一帧,没有动态效果。

Imagick就能很好的胜任这一点,使得php给动态gif图片打水印成为可能,而且它还具有内存占用小,画质高的特点。

下面是分别使用gd(左图)和imagick(右图)把图片缩放到256px效果,请注意查看图片的细节。

256-photo-gd256-photo-imagick

下面我会详细介绍“php怎么安装Imagick扩展”并实例说明如何給动态gif图片打水印。

 

imagick有两种使用方式:

1.命令行下调用convert命令

2.php调用函数库Imagick(需要1作为安装基础)

 

安装前的准备工作(ImageMagick 6.2.4+ , PHP 5.1.3+.),先安装需要的库文件

下载imagemagick并编译安装

(编译安装过程时间比较长,请耐心等待。安装后 convert 的路径是 /usr/local/bin/convert,可以直接从命令行运行"convert -version"来看看版本。如果发现类似错误,convert: error while loading shared libraries: libMagickCore.so.3: cannot open shared object file: No such file or directory,可以执行"ldconfig /usr/"重新加载一下库文件的路径。)

到这里imagemagic命令行工具已经安装完成,也就是常说的convert命令,执行回下命令会生成logo.gif图片就表示命令行下的imagemagic安装完成了,快来体验一下吧。

cd /usr/local/nginx/html/
/usr/local/bin/convert logo: logo.gif

访问http://www.nginx.cn/logo.gif

如果你能看到这个图片就表示安装正确。
image imagic

高级命令令例子:

从中间裁切200x200正方形图片

convert 1.jpg -gravity center -extent 200x200 2.jpg

生成的图片最小的边要有500像素

convert 1.jpg -resize 500x500^ 2.jpg

合成一条,看看有多强大,你放张200x300左右的图片试下,这条命令将会将图片最小的边按比例强行扩大到500像素,再从正中央裁切200像素的正方式

convert 1.jpg -resize 500x500^ -gravity center -extent 200x200 2.jpg

给图片 base.jpg 在y100,x10的位置加上图片 sy.png 水印

composite -geometry +100+10 sy.png base.jpg finished.jpg

详细功能请参考官方手册

http://www.imagemagick.org/Usage/

php增加imagick扩展函数

1.译PHP原生库Imagick
wget http://pecl.php.net/get/imagick-3.1.1.tgz
tar zxvf imagick-3.1.1.tgz
cd imagick-3.1.1/
/usr/local/php/bin/phpize
ln -s /usr/local/include/ImageMagick-6 /usr/local/include/ImageMagick
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install

/usr/local/php替换为你的php安装路径并确认bin目录下存在php-config文件

编译成功后会在php 扩展目录生成imagick.so
位置是
Installing shared extensions:
/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/
Installing header files:
/usr/local/php/include/php/

2.php加载Imagick库
修改php.ini,文件末尾加上一行
extension = "imagick.so"

如何查找php.ini的位置?
执行
/usr/local/php/bin/php --ini
会显示php.ini所在路径,路径下没有php.ini文件,
Configuration File (php.ini) Path: /usr/local/php/lib
Loaded Configuration File: (none)
Scan for additional .ini files in: (none)
Additional .ini files parsed: (none)

我们可以新建一个空的php.ini,并加入一行extension = "imagick.so"
vi /usr/local/php/lib
增加

extension = "imagick.so"

3.查看phpinfo,确认imagick是否加载成功

使用imagick库生产缩略图,logo.gif是前面用命令行生产的图片
[php]
<?php
header('Content-type: image/jpeg');

$image = new Imagick('logo.gif');
$image->adaptiveResizeImage(1024,768);

echo $image;
?>
[/php]

访问:htt://www.nginx.cn/p.php
slt

[php]
<?php
$image = new Imagick('old.gif');
$image = $image->coalesceImages();
foreach ($image as $frame) {
$frame->thumbnailImage(50, 50);
}
$image = $image->optimizeImageLayers();
$image->writeImages('new.gif', true);
?>
[/php]

安装过程中遇到的错误:
magick/.libs/libMagickCore.so: undefined reference to gzseek64'
magick/.libs/libMagickCore.so: undefined reference to
gztell64'
magick/.libs/libMagickCore.so: undefined reference to `gzopen64

从字面上看找不到64为的zlib,也就是说没能正确链接到64的zlib路径,我们可以安装64的zlib并把它的路径加到命令行(推荐方式)。

具体步骤

ldconfig -v |grep libz
显示,这个库是32位的所以连接失败
libz.so.1 -> libz.so.1.2.3

wget http://zlib.net/zlib-1.2.8.tar.gz
tar -zxvf zlib-1.2.8.tar.gz
cd zlib-1.2.8

CFLAGS=-fPIC ./configure --libdir=/usr/lib64 --prefix=/usr
make
make install

cd ../ImageMagick-6.8.6-10/

./configure --with-zlib-dir=/usr/local/lib/

make

如果编译还是错误,可以把libz.so.1.2.3移动到其它位置

mv /usr/lib/libz.so.1.2.3 ~

ldconfig -v |grep libz
libz.so.1 -> libz.so.1.2.8

再make就成功了。

checking for MagickWand.h header file... configure: error: Cannot locate header file MagickWand.h

新版的imagemagick路径修改了,需要建立到默认路径的软连接

ln -s /usr/local/include/ImageMagick-6 /usr/local/include/ImageMagick

参考资料
http://valokuva.org/?cat=1

分类: php 标签: , , ,

Call to undefined function imagecreatefromjpeg()

2013年5月6日 2 条评论

默认的php安装后gd不支持jpg,只支持gif、png、bmp

查看phpinfo

之前我曾经解决过,不过当时没留笔记,这次折腾了一天才弄出来,当一个教训吧。

隐约记得之前我配的没这么麻烦,如果你知道更简单的方法,请给我留言,先谢谢了。

重新安装gd

重新编译php,指定gd2安装目录,如果不指定目录会在configure是报错

编译php

编译时php5.4.7 安装出现 error: ‘struct gdIOCtx’ has no member named ‘data’

ext/gd/gd_ctx.c:67:8: error: ‘struct gdIOCtx’ has no member named ‘data’
解决方法:这个错误算是php5.4的bug?下面对应的两篇文章有对应的说明:
https://bugs.php.net/bug.php?id=55224
https://bugs.php.net/bug.php?id=60108
个人采用的方法:
vi <gd_dir>/include/gd_io.h
gdIOCtx结构中增加void *data;

gdparttopng.c:42: undefined reference to `gdImageCreateFromGd2Part’
yum install libjpeg-devel freetype-devel libpng-devel
make clean后重新./configure
make&make install

查看phpinfo

虽然没有版本号,但是imagecreatefromjpeg()可以使用了。

终于有jpeg了

分类: php 标签: , ,

413 Request Entity Too Large

2013年4月19日 没有评论

昨天用wordpress发布文章,文章内容是一个网站一段时间来的运行信息,20几页的列表结果粘到编辑器。

点击发布后,页面卡住了,过了一会返回浏览器显示“413 Request Entity Too Large”。

第一感觉就是文章内容太多,超过了nginx配置的限制,

看了一下nginx.conf发现没有设置client_max_body_size,这个参数默认只是1M,也就是说发布的文章内容大小不能超过1M

解决办法:
阅读全文...

分类: nginx, php 标签: ,

php生成网站缩略图

2013年3月22日 没有评论

我要明确的回答使用php生成网站缩略图是不可能完成的任务。

那为什么我标题还要用“php生成网站缩略图”,那是因为我们可以用php作为接口,通过页面传入参数来调用后台生成网页的缩略图。

由于太费资源这个功能已经关闭了,但是原理还是如下描述。

比如这个样子:http://thumb.quancha.cn/api.php?q=www.264.cn

你就能得到中通速递单号查询 www.264.cn的缩略图

 

很简单吧。把www.264.cn换成你需要的网址就可以了,第一次生成的时候需要等待十几秒,然后刷新页面就可以了。

上面只是个使用实例,那最关键的部分是如何实现这个实例。
阅读全文...

分类: php 标签: