编译gdlib库碰到undefined reference to `png_check_sig’问题解决

采用源码方式编译php,需要gd库,同样采用源码编译,在编译过程中碰到 undefined reference to `png_check_sig’ 错误。
google了一下,发现由于使用的新的 libpng 1.4版本,去掉了png_check_sig函数,替换为了png_sig_check函数
,于是编辑gd库的 gd_png.c文件,将

  1. if (!png_check_sig (sig, 8)) { /* bad signature */
  2.   return NULL;
  3. }

修改为

  1. if (png_sig_cmp (sig, 0, 8)) { /* bad signature */
  2.   return NULL;
  3. }

再次编译通过

Popularity: 7% [?]

Related

在linux上php函数fgetcsv获取数据异常的解决(读取gbk数据乱码)

写了一个导入数据的小函数,因为偷懒使用了php自带的fgetcsv函数,结果在window机器上测试时一切正常,放到linux服务器上跑时,读入的数据乱码。

在google上搜索发现如下信息:

fgetcsv函数对区域设置是敏感的。比如说 LANG 设为 en_US.UTF-8 的话,单字节编码的文件就会出现读取错误。

实际应用中,当Linux系统是使用的默认设置,则在该Linux服务器上对gbk的csv格式文件进行处理的时候,就会出现乱码现象。

解决方法是

使用 setlocale 函数设置环境变量。比如要设置使用gb 的区域设置可以在fgetcsv前使用下面的语句。

  1. setlocale(LC_ALL,array('zh_CN.gbk','zh_CN.gb2312','zh_CN.gb18030'));

具体使用哪些locale 可以使用linux 命令 locale -a 查看系统支持哪些。

Popularity: 7% [?]

Related

在php中使用mysql存储过程以及碰到的问题解决方法

mysql 5中增加了存储过程功能,他们在php中使用很方便。
在php中调用存储过程和函数的主要步骤为。

一.准备存储过程的参数

如果存储过程有输入参数,则需要声明一个mysql变量,让mysql服务器知道此变量的存在,执行mysql语句 mysql_query(“set @mysqlvar =$phpvar”);
就可以在mysql服务器里面就有一个变量@mysqlvar。如果时IN参数,那么其值可以有phpvar传入。

二.调用存储过程

1.执行 call procedure()语句
也就是mysql_query(“call proceduer([var1]…)”);

2. 如果参数有OUT返回值,执行select @var,获取返回的参数结果
mysql_query(“select @var”)

接下来的操作就和php执行一般的mysql语句一样了。可以通过mydql_fetch_row()等函数获得结果。

如果是函数。 直接执行 select function() 就可以了。

———使用中碰到的问题解决——-

不能执行存储过程

在定义存储过程的时候,将存储过程类型设置为 DETERMINISTIC 。

定义的存储过程中有多个select语句,call失败

通过 mysql_error()输出错误提示 can’t return a result set in the given context
在mysql_connect连接数据库时指定 CLIENT_MULTI_RESULTS 标志。

  1. <?php
  2.     define(’CLIENT_MULTI_RESULTS’, 131072);
  3.  
  4.     $conn = mysql_connect("localhost", "root", "rootpwd",1,CLIENT_MULTI_RESULTS) or die("Could not connect: ".mysql_error($conn));
  5.     mysql_select_db("mydb", $conn) or die("Could not select database");
  6.    
  7.     $result = mysql_query("call proc_get_datas(2)", $conn);
  8.  
  9.     while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
  10.          // do something
  11.     }
  12.  
  13.      mysql_free_result($result, $conn);
  14.    
  15.     mysql_close($conn);    
  16. ?>

Popularity: 6% [?]

Related

php处理xml soap数据的一些小工具

由于要编写MMS彩信服务,搜索了一些php上关于WebService soap处理的相关工具,虽然最后没有使用php直接来处理彩信的收发,但是资料工具整理一下,供以后类似需要的地方使用。

处理Soap数据

处理wsdl 的辅助工具

Popularity: 6% [?]

Related

给fast-cgi方式的php做一个检查脚本

使用fast-cgi方式的php在使用,有时候由于编写的代码问题,使处理代码的php-cgi进程的运行占用很多时间,在将所有活动的 php-cgi 进程都占用后,web服务器对php的请求就失去响应了。

通过命令查看服务器上一共开了多少的 php-cgi 进程

  1. ps -fe |grep "php" | grep -v "grep" | wc -l

使用如下命令查看已经有多少个php-cgi进程用来处理tcp请求

  1. netstat -anop | grep "php" | grep -v "grep" | wc -l

当被使用的php进程接近所开启的php进程数时,可以考虑将被耗用的php进程释放一下,以防止网站访问的阻塞。

按照以上思路编写了一个检查脚本。

  1. #
  2. #!/bin/sh
  3. #
  4.  
  5. echo "begin check"
  6.  
  7. #define default check delta num
  8. defdeltacount=10
  9.  
  10. phpcount=`ps -fe |grep "php" | grep -v "grep" | wc -l`
  11. netstatcount=`sudo netstat -anop | grep "php" | grep -v "grep" | wc -l`
  12.  
  13. echo "  php process count is $phpcount
  14.  netstat process count is $netstatcount"
  15.  
  16. deltacount=`expr $phpcount$netstatcount`
  17.  
  18. if [ -n "$1" ]; then
  19.   defdeltacount=$1
  20. fi
  21.  
  22. echo "deltacount is $deltacount, defdeltacount is $defdeltacount"
  23.  
  24. if [ $deltacount -lt $defdeltacount ]; then
  25.   echo "  need reset"
  26.   sudo /root/tools/resetphp.sh
  27. else
  28.   echo "  not need reset"
  29. fi
  30.  
  31. echo "check end"

其中 /root/tools/resetphp.sh 为编写的php重启脚本。
脚本可以放到 crontab 中,做自动定时检查处理。

Popularity: 4% [?]

Related

编译mogileFS的php模块

下载 php 的mofileFS 模块, 下载地址在http://www.sunnyu.com/?p=10有列出
1. 解压
2. 执行 phpize 命令
3. 执行 ./configure –with-php-config=/usr/local/php526/bin/php-config
4. 执行 make
碰到错误,原来是没有安装 neon 开发包,于是在linux安装盘上找到 neon-0.24.7-4.i386.rpm, neon-devel-0.24.7-4.i386.rpm
将其安装上

  1.  rpm -ivh neon-0.24.7-4.i386.rpm
  2.  rpm -ivh neon-devel-0.24.7-4.i386.rpm

再使用 make ,一切正常
5. make install
记录下拷贝到的路径
6. 修改php.ini 里面添加上新的模块
再module部分添加上上面记录下的文件路径
7. 编写一个php 页面做测试

Popularity: 4% [?]

Related

使用Delphi4Php的模板功能

Delphi4php使用了smarty做为其内部的模板引擎,在实际使用中,我们只要设置 Page 的 TemplateEngine 属性值为 SmartyTemplate,并将 TemplateFileName 属性设置为该页面对应的 模板文件,在实际使用的时候就会使用模板中设置的布局来显示。

模板文件遵循Smarty 的风格,区别就是使用 {% 和 %} 来包含模板脚本内容, 而不是我们习惯的 { 和 }包含。

在模板中可以直接使用在 Page 上定义的属性,比如,在 Page 上放一个 Label 取名称 lbTest, 则在模板文件中可以通过 {% $lbTest %} 来将lbTest的Label显示出来, 被显示的lbTest将按照lbTest所定义的各种属性行为来表现,比如字体的大小颜色等,对 lbTest 定义的事件处理方法也会转化为相关的脚本调用。

默认模板可以使用在Page上放置的组件变量,如果要在模板中使用非Page上放置的组件对象,则需要设置Page 的 OnTemplate 事件, 比如。

  1.        function IndexTemplate($sender, $params)
  2.        {
  3.           // 获取使用的模板引擎对象
  4.           $smarty = $params['template']->_smarty;
  5.           // 为模板设置一些非控件的变量值,这儿设置变量名称为 test
  6.           $smarty->assign('test', "测试额外变量文字");
  7.        }

然后在模板中使用 {% $test %} 就可以显示在这儿设置的文字内容。

——-
我测试时发现一个问题,如果在设计时指定好 Page 的 TemplateEngine 和 TemplateFileName,则在修改模板内容并做保存时,会将Page的事件处理关联关系去除,而且按F11不能编辑Page的属性了,不知道是Delphi4Php的Bug问题还是我的RP问题。
好在通过在设计时先不设置这两个属性的值,然后在Page的OnCreate中动态的设置这两个属性的值可以解决这个问题。

  1.        function IndexCreate($sender, $params)
  2.        {
  3.            $this->TemplateEngine = "SmartyTemplate";
  4.            $this->TemplateFilename = "index.tpl";
  5.        }

Popularity: 4% [?]

Related

Delphi4Php 2.0 使用浅尝

自前两天知道Delphi4Php推出2.0版后,于是就从网上下载了下来试一下后的感觉如下:

1.IDE的启动运行速度很快,而且占用资源不多,只有十来兆的内存。(和ZendStudio没有办法比,Delphi4PHP就好像轻装上阵的大奔,ZendStudio就好像肥胖的骡子拉车,毕竟还是原生的Win32程序在运行速度和资源占用上比java写的程序强很多)
2. Delphi4Php 2.0 的IDE原生支持简体中文,只要在 options 的Interface language 中选择 simplified chinese重新启动IDE环境就可以看到菜单什么的都变为中文提示了,只可惜帮助还是英文的,要是再有中文帮助就更好了。
3. 使用类似于Delphi VCL的组件,使php的编程方式延续以前delphi的一些风格,这个对以前用习惯了delphi使用的人还是比较方便的。(使用的是开源的 VCL4Php 包)
4. 使用 smarty 做后台模板处理引擎,但是使用 {% 和 %} 做 smarty 模板代码的识别标志,这样以前对php 的smarty 使用经验可以继续。
5. 有完好的代码完成功能,这个比直接用 EditPlus 编写php代码要方便很多,可以在很大程度上降低代码拼写错的几率
6. 其他一些作为一个ide所应该具有的特性,而且延续了delphi ide的一些功能
7. …

不过有缺憾,没有zend所支持的集成的版本控制库功能。

总的感觉作为一个php的IDE环境在运行速度,资源消耗和功能上还是可以的,但是通过使用VCL4PHP所写出来的代码执行效率就不知道会怎么样了,下次在做测试。

使用中发现一点小问题,当使用一个模板页面做测试时,运行后提示
Fatal error: Smarty error: the $compile_dir ‘/tmp’ does not exist, or is not a directory.
查看了一下SmartyTemplate.inc.php 文件代码,发现在WIN系统下要使用 $_ENV['TMP'] 值的,在我的环境中不知怎么这个为空,于是添加了几行小代码。

global $_ENV;
$_ENV['TMP'] ='d:\www\delphi4phptest\tmp';

在运行,问题解决。

还有就是js脚本对 firefox 的支持不是太好。
使用了一个简单的 button.click 事件的处理,用来设置一个标签上的文字,在IE下运行完好,但是在 firefox 下脚本却不起作用,后来google查找,发现这个地址有说明: FireFox对脚本的执行有限制,引用的js必须要和文件在同一个驱动器下才行(右键查看页面代码可以看到测试运行时,页面有对安装目录下的js引用,使用的是绝对路径),我的测试工程目录和delphi4php的安装目录不在同一个驱动器下,于是将测试工程挪到安装驱动器下继续测试,这时在firefox下打开正常。

Popularity: 4% [?]

Related

使用Memcache做为php的Session Handler

在为php安装了memcache模块后查看该模块的说明文件,发现他还可以直接作为php的session handler使用,而无需做做额外的编码处理。

设置方法很简单,只要修改php.ini中的以下键的值

  1. session.save_handler = memcache
  2. session.save_path = 'tcp://127.0.0.1:11211'  #有多个时直接用","分隔即可

要测试一下是否真的用上了memcache,可以先获取使用的PHPSESSID,然后将其作为KEY用memcach去读一下,就知道了。

使用memcache做php的session handler好处

  1. 使用内存存放session信息,不经过磁盘,数据库等,速度快
  2. 可以多台机器共用一个/组memcached服务器,达到多台机器共享session信息,方便多机集群的session问题处理。

使用memcache做为php的session handler坏处

  1. 首先memcached的服务必须正常工作,否则php的session相关功能将不起作用,这样php的处理就多了一层外面的依赖。
  2. 由于memcached是使用内存的,这样当用户量比较大时,就可能由于内存方面原因导致session时长上的问题,session的实际失效时长达不到设定的失效时长(由于memcached在内存不够下的处理机制决定)
  3. 由于memcached的内存管理机制,当session存储的数据超过1MB的时候有数据丢失问题(不过一般不会有人在session中存放这么多的信息吧)。

根据以上的一些情况决定自己在实际环境中是否使用memcache做为php的session handler

Popularity: 3% [?]

Related

为php添加Memcache模块

memcached不用说了,都知道是做数据缓冲用的,这里为 php 添加memcached 的支持。
php的memcache 模块地址 http://pecl.php.net/package/memcache
通过

  1. wget http://pecl.php.net/get/memcache-2.2.3.tgz

下载源码包。

编译安装源码包

  1. tar -zxvf memcache-2.2.3.tgz
  2. cd memcache-2.2.3/
  3. /usr/local/php526/bin/phpize
  4. ./configure –with-php-config=/usr/local/ php526/bin/php-config
  5. make
  6. make install
  7. cd ../

配置php.ini
修改 /usr/local/php526/etc/php.ini 文件,搜索其中的
extension_dir = “./”
将其修改为extension_dir = “/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/”
并在后面的一堆 extension 列表后面添加如下的设置
extension = “memcache.so”

验证安装

Popularity: 3% [?]

Related

Next Page →