在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
编译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% [?]