编译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文件,将
-
if (!png_check_sig (sig, 8)) { /* bad signature */
-
return NULL;
-
}
修改为
-
if (png_sig_cmp (sig, 0, 8)) { /* bad signature */
-
return NULL;
-
}
再次编译通过
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前使用下面的语句。
-
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 标志。
-
<?php
-
define(’CLIENT_MULTI_RESULTS’, 131072);
-
-
$conn = mysql_connect("localhost", "root", "rootpwd",1,CLIENT_MULTI_RESULTS) or die("Could not connect: ".mysql_error($conn));
-
mysql_select_db("mydb", $conn) or die("Could not select database");
-
-
$result = mysql_query("call proc_get_datas(2)", $conn);
-
-
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
-
// do something
-
}
-
-
mysql_free_result($result, $conn);
-
-
mysql_close($conn);
-
?>
Popularity: 6% [?]
Related
php处理xml soap数据的一些小工具
由于要编写MMS彩信服务,搜索了一些php上关于WebService soap处理的相关工具,虽然最后没有使用php直接来处理彩信的收发,但是资料工具整理一下,供以后类似需要的地方使用。
处理Soap数据
- 1. NuSoap
- 2. php5内带的soap模块
- 3.WSO2 WSF/PHP
这个网上的介绍的很多
需要添加相应的扩展,要不然不能使用。
这个看上去不错,不过没有做尝试
处理wsdl 的辅助工具
- 1. WSDL to Php Code
- 2. WSDL2php
- 3. WSDLInterpreter
这个只提供在线的转化,需要将wsdl文件放在外网可以访问的网络上,然后在 http://1018-media.com/wsdlstubgen/ 这个地址生成所需要的代码。不过这个网址要使用代理才能访问。
所在网址: http://www.urdalen.no/wsdl2php/
这个生成的代码最详细,有wsdl中的数据类型定义生成,方便做数据校验处理。
所在网址: http://code.google.com/p/wsdl2php-interpreter/
Popularity: 6% [?]
Related
给fast-cgi方式的php做一个检查脚本
使用fast-cgi方式的php在使用,有时候由于编写的代码问题,使处理代码的php-cgi进程的运行占用很多时间,在将所有活动的 php-cgi 进程都占用后,web服务器对php的请求就失去响应了。
通过命令查看服务器上一共开了多少的 php-cgi 进程
-
ps -fe |grep "php" | grep -v "grep" | wc -l
使用如下命令查看已经有多少个php-cgi进程用来处理tcp请求
-
netstat -anop | grep "php" | grep -v "grep" | wc -l
当被使用的php进程接近所开启的php进程数时,可以考虑将被耗用的php进程释放一下,以防止网站访问的阻塞。
按照以上思路编写了一个检查脚本。
-
#
-
#!/bin/sh
-
#
-
-
echo "begin check"
-
-
#define default check delta num
-
defdeltacount=10
-
-
phpcount=`ps -fe |grep "php" | grep -v "grep" | wc -l`
-
netstatcount=`sudo netstat -anop | grep "php" | grep -v "grep" | wc -l`
-
-
echo " php process count is $phpcount
-
netstat process count is $netstatcount"
-
-
deltacount=`expr $phpcount – $netstatcount`
-
-
if [ -n "$1" ]; then
-
defdeltacount=$1
-
fi
-
-
echo "deltacount is $deltacount, defdeltacount is $defdeltacount"
-
-
if [ $deltacount -lt $defdeltacount ]; then
-
echo " need reset"
-
sudo /root/tools/resetphp.sh
-
else
-
echo " not need reset"
-
fi
-
-
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
将其安装上
-
rpm -ivh neon-0.24.7-4.i386.rpm
-
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 事件, 比如。
-
function IndexTemplate($sender, $params)
-
{
-
// 获取使用的模板引擎对象
-
$smarty = $params['template']->_smarty;
-
// 为模板设置一些非控件的变量值,这儿设置变量名称为 test
-
$smarty->assign('test', "测试额外变量文字");
-
}
然后在模板中使用 {% $test %} 就可以显示在这儿设置的文字内容。
——-
我测试时发现一个问题,如果在设计时指定好 Page 的 TemplateEngine 和 TemplateFileName,则在修改模板内容并做保存时,会将Page的事件处理关联关系去除,而且按F11不能编辑Page的属性了,不知道是Delphi4Php的Bug问题还是我的RP问题。
好在通过在设计时先不设置这两个属性的值,然后在Page的OnCreate中动态的设置这两个属性的值可以解决这个问题。
-
function IndexCreate($sender, $params)
-
{
-
$this->TemplateEngine = "SmartyTemplate";
-
$this->TemplateFilename = "index.tpl";
-
}
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中的以下键的值
-
session.save_handler = memcache
-
session.save_path = 'tcp://127.0.0.1:11211' #有多个时直接用","分隔即可
要测试一下是否真的用上了memcache,可以先获取使用的PHPSESSID,然后将其作为KEY用memcach去读一下,就知道了。
使用memcache做php的session handler好处
- 使用内存存放session信息,不经过磁盘,数据库等,速度快
- 可以多台机器共用一个/组memcached服务器,达到多台机器共享session信息,方便多机集群的session问题处理。
- …
使用memcache做为php的session handler坏处
- 首先memcached的服务必须正常工作,否则php的session相关功能将不起作用,这样php的处理就多了一层外面的依赖。
- 由于memcached是使用内存的,这样当用户量比较大时,就可能由于内存方面原因导致session时长上的问题,session的实际失效时长达不到设定的失效时长(由于memcached在内存不够下的处理机制决定)
- 由于memcached的内存管理机制,当session存储的数据超过1MB的时候有数据丢失问题(不过一般不会有人在session中存放这么多的信息吧)。
- …
根据以上的一些情况决定自己在实际环境中是否使用memcache做为php的session handler
Popularity: 3% [?]
Related
为php添加Memcache模块
memcached不用说了,都知道是做数据缓冲用的,这里为 php 添加memcached 的支持。
php的memcache 模块地址 http://pecl.php.net/package/memcache
通过
-
wget http://pecl.php.net/get/memcache-2.2.3.tgz
下载源码包。
编译安装源码包
-
tar -zxvf memcache-2.2.3.tgz
-
cd memcache-2.2.3/
-
/usr/local/php526/bin/phpize
-
./configure –with-php-config=/usr/local/ php526/bin/php-config
-
make
-
make install
-
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% [?]