substr()的问题,在线等 $tmp是面有字符吗字符串长度大于3吗 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以肯定$tmp中存了字符串并且长度大于3,echo $tmp能看到. 跟变量的值没关系的.比如:$tmp = '123456789';$tmp = substr($tmp,-3);这样也取不到值.这个跟php.ini中的设置有关系吗? 不可能!如果确认你发现的现象是真实的,请向php开发组织报告BUG 不好意思.前面说的$tmp = '123456789';$tmp = substr($tmp,-3);是能够取到值的.问题还是没有解决,看来不是substr()函数的问题. 各位老大帮我分析下啊.分再++问题不止上面上的这一个,还有下面的问题: if($pic != ''){ if(strstr($pic,"swf")!= false){ echo "<object classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=4,0,2,0' align='center' width='550' height='400'>"; echo "<param name=movie value='$pic'>"; echo " <param name=quality value=high>"; echo " <embed src='$pic'"." quality=high pluginspage='http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash' type='application/x-shockwave-flash' width='$wd' height='$ht' align='left'>"; echo " </embed> "; echo "</object> "; } else{ echo "<p align='center'>"; echo "<a href='".$pic."' target='_blank'><img src='".$pic."' border=0></a>"; echo "</p>"; } }上面这段代码的预期目标是判断$pic变量的值如果不为空的话,检查值的最后三位是不是swf,如果是的话输出一个flash图像,如果不是swf直接使用img标签显示一个图片.现在,如果$pic值是空的,也会执行else后面的代码.这些问题都是在PHP版本从4.1.2升级到4.4.2才发生的.头都大了啊. if($pic != ''){改成: if(!empty($pic)){ if(!empty($pic) && isset($pic)){ 又测试了一下.empty($pic)是false,echo $pic 没有内容.现在跟找出问题原因比较接近了.大虾们再帮我分析下啊.$pic = $db->dataobj->DBVoice;数据库是SQL2000DBVoice字段类型是char(250)现在的问题似乎可以归结为:DBVoice字段为空时.$pic的值非空.那么$pic中的值到底是什么呢? 呵呵,“上面这段代码的预期目标是判断$pic变量的值如果不为空的话,检查值的最后三位是不是swf,如果是的话输出一个flash图像,如果不是swf直接使用img标签显示一个图片.现在,如果$pic值是空的,也会执行else后面的代码.”这话说的有毛病!本来就是“不为空”才判断执行,那么“如果$pic值是空的”当然也就“执行else后面的代码”“这些问题都是在PHP版本从4.1.2升级到4.4.2才发生的.”早说嘛,问题也早就解决了,何至于“头都大了啊”检查 register_globals 的状态4.1.2 默认为on4.4.2 默认为off而你的 $pic 是传入的变量 老大,我在4.4.2中的 register_globals = Onisset($pic)也是true 各位老大,我这里的代码太乱了.上面说的判断是否为swf文件时嵌套使用了if. echo $pic;没有输出内容.[DBVoice] [char] (250) COLLATE Chinese_PRC_CI_AS NOT NULL上面这个是数据库中的字段定义,$pic值就是取自这个字段.现在的情况整理一下:$pic != ''is_null($pic) falseempty($pic) false$pic无输出内容. 你的字段是char类型的,长度是250字节所以你的$pic也是长度为250字节的串echo strlen($pic); //输出 250你只需在 if($pic != ''){前面加上$pic = trim($pic);就可以了 先谢谢老大的耐心解答,下午我去试试.这个跟PHP版本升级有关系吗?因为这些代码在4.1.2下面都是能实现预期功能的. 判断一下$pic变量的长度,然后看到底是什么值,建议写到文件里用UltraEdit-32打开,其实我觉得你判断它为空就没必要,直接判断它结尾是否为“swf”不就行了,然后else输出图片 回楼上的,$pic的值可能是空的(实际情况是文章中没有插入图片).所以要判断一下. 问题解决了!!谢谢各位.TO 唠叨老大:4.4.2下面,echo strlen($pic)确实是250,不管有没有实际值.但在4.1.2下面,如果$pic为空,那么strlen($pic)是0.不明白这是为什么. 现在数据库中大部分字段都是定长CHAR型的,如果这样的话,代码中要改的地方太多了.大家也看到了,我们现在的代码有多乱,不好维护啊. 1、可以修改数据库中的char类型为varchar类型,这样就不需要修改代码2、只修改从数据库读取数据部分的代码,取数时做一下trim。这样就不需要修改其他地方的代码 tmp目录下的session文件中记录的信息也被插入了大量的空格.我比较了新旧两个php.ini配置文件,新的配置文件中多出来不少选项...哎,菜鸟的悲哀啊.真希望有个选项,改了以后就万事OK了... PHP 如何做文档转化? GMT时区下的时间戳与你所在时区下的时间戳的秒数差距有多大 这个投票程序在服务器上不能用. PHP自动切掉小数点后面的00 该如何处理才能保存小数后面的00 登陆ftp的问题 急,关于ACCESS导到MYSQL里 哪儿有b/s进销存系统 ? smarty的自动过滤$smarty->auto_literal 会影响整体效能吗? 按照路径移动文件 PHP本地访问的问题 问一个php查询数据库的问题 php获取字符acssii的函数
比如:
$tmp = '123456789';
$tmp = substr($tmp,-3);
这样也取不到值.这个跟php.ini中的设置有关系吗?
如果确认你发现的现象是真实的,请向php开发组织报告BUG
$tmp = '123456789';
$tmp = substr($tmp,-3);
是能够取到值的.问题还是没有解决,看来不是substr()函数的问题.
if(strstr($pic,"swf")!= false){
echo "<object classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=4,0,2,0' align='center' width='550' height='400'>";
echo "<param name=movie value='$pic'>";
echo " <param name=quality value=high>";
echo " <embed src='$pic'"." quality=high pluginspage='http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash' type='application/x-shockwave-flash' width='$wd' height='$ht' align='left'>";
echo " </embed> ";
echo "</object> ";
}
else{
echo "<p align='center'>";
echo "<a href='".$pic."' target='_blank'><img src='".$pic."' border=0></a>";
echo "</p>";
}
}上面这段代码的预期目标是判断$pic变量的值如果不为空的话,检查值的最后三位是不是swf,如果是的话输出一个flash图像,如果不是swf直接使用img标签显示一个图片.现在,如果$pic值是空的,也会执行else后面的代码.这些问题都是在PHP版本从4.1.2升级到4.4.2才发生的.
头都大了啊.
if(!empty($pic)){
empty($pic)是false,
echo $pic 没有内容.现在跟找出问题原因比较接近了.大虾们再帮我分析下啊.$pic = $db->dataobj->DBVoice;数据库是SQL2000
DBVoice字段类型是char(250)
现在的问题似乎可以归结为:
DBVoice字段为空时.$pic的值非空.
那么$pic中的值到底是什么呢?
早说嘛,问题也早就解决了,何至于“头都大了啊”
检查 register_globals 的状态
4.1.2 默认为on
4.4.2 默认为off
而你的 $pic 是传入的变量
isset($pic)也是true
上面说的判断是否为swf文件时嵌套使用了if.
没有输出内容.[DBVoice] [char] (250) COLLATE Chinese_PRC_CI_AS NOT NULL
上面这个是数据库中的字段定义,$pic值就是取自这个字段.现在的情况整理一下:
$pic != ''
is_null($pic) false
empty($pic) false
$pic无输出内容.
所以你的$pic也是长度为250字节的串
echo strlen($pic); //输出 250你只需在
if($pic != ''){
前面加上
$pic = trim($pic);
就可以了
4.4.2下面,echo strlen($pic)确实是250,不管有没有实际值.
但在4.1.2下面,如果$pic为空,那么strlen($pic)是0.不明白这是为什么.
2、只修改从数据库读取数据部分的代码,取数时做一下trim。这样就不需要修改其他地方的代码
我比较了新旧两个php.ini配置文件,新的配置文件中多出来不少选项...哎,菜鸟的悲哀啊.真希望有个选项,改了以后就万事OK了...