$tmp是面有字符吗
字符串长度大于3吗

解决方案 »

  1.   

    可以肯定$tmp中存了字符串并且长度大于3,echo $tmp能看到.
      

  2.   

    跟变量的值没关系的.
    比如:
    $tmp = '123456789';
    $tmp = substr($tmp,-3);
    这样也取不到值.这个跟php.ini中的设置有关系吗?
      

  3.   

    不可能!
    如果确认你发现的现象是真实的,请向php开发组织报告BUG
      

  4.   

    不好意思.前面说的
    $tmp = '123456789';
    $tmp = substr($tmp,-3);
    是能够取到值的.问题还是没有解决,看来不是substr()函数的问题.
      

  5.   

    各位老大帮我分析下啊.分再++问题不止上面上的这一个,还有下面的问题:                  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才发生的.
    头都大了啊.
      

  6.   

    if($pic != ''){改成:
     if(!empty($pic)){
      

  7.   

    if(!empty($pic) && isset($pic)){
      

  8.   

    又测试了一下.
    empty($pic)是false,
    echo $pic 没有内容.现在跟找出问题原因比较接近了.大虾们再帮我分析下啊.$pic = $db->dataobj->DBVoice;数据库是SQL2000
    DBVoice字段类型是char(250)
    现在的问题似乎可以归结为:
    DBVoice字段为空时.$pic的值非空.
    那么$pic中的值到底是什么呢?
      

  9.   

    呵呵,“上面这段代码的预期目标是判断$pic变量的值如果不为空的话,检查值的最后三位是不是swf,如果是的话输出一个flash图像,如果不是swf直接使用img标签显示一个图片.现在,如果$pic值是空的,也会执行else后面的代码.”这话说的有毛病!本来就是“不为空”才判断执行,那么“如果$pic值是空的”当然也就“执行else后面的代码”“这些问题都是在PHP版本从4.1.2升级到4.4.2才发生的.”
    早说嘛,问题也早就解决了,何至于“头都大了啊”
    检查 register_globals 的状态
    4.1.2 默认为on
    4.4.2 默认为off
    而你的 $pic 是传入的变量
      

  10.   

    老大,我在4.4.2中的 register_globals = On
    isset($pic)也是true
      

  11.   

    各位老大,我这里的代码太乱了.
    上面说的判断是否为swf文件时嵌套使用了if.
      

  12.   

    echo $pic;
    没有输出内容.[DBVoice] [char] (250) COLLATE Chinese_PRC_CI_AS NOT NULL
    上面这个是数据库中的字段定义,$pic值就是取自这个字段.现在的情况整理一下:
    $pic != ''
    is_null($pic)  false
    empty($pic) false
    $pic无输出内容.
      

  13.   

    你的字段是char类型的,长度是250字节
    所以你的$pic也是长度为250字节的串
    echo strlen($pic); //输出 250你只需在
     if($pic != ''){
    前面加上
    $pic = trim($pic);
    就可以了
      

  14.   

    先谢谢老大的耐心解答,下午我去试试.这个跟PHP版本升级有关系吗?因为这些代码在4.1.2下面都是能实现预期功能的.
      

  15.   

    判断一下$pic变量的长度,然后看到底是什么值,建议写到文件里用UltraEdit-32打开,其实我觉得你判断它为空就没必要,直接判断它结尾是否为“swf”不就行了,然后else输出图片
      

  16.   

    回楼上的,$pic的值可能是空的(实际情况是文章中没有插入图片).所以要判断一下.
      

  17.   

    问题解决了!!谢谢各位.TO 唠叨老大:
    4.4.2下面,echo strlen($pic)确实是250,不管有没有实际值.
    但在4.1.2下面,如果$pic为空,那么strlen($pic)是0.不明白这是为什么.
      

  18.   

    现在数据库中大部分字段都是定长CHAR型的,如果这样的话,代码中要改的地方太多了.大家也看到了,我们现在的代码有多乱,不好维护啊.
      

  19.   

    1、可以修改数据库中的char类型为varchar类型,这样就不需要修改代码
    2、只修改从数据库读取数据部分的代码,取数时做一下trim。这样就不需要修改其他地方的代码
      

  20.   

    tmp目录下的session文件中记录的信息也被插入了大量的空格.
    我比较了新旧两个php.ini配置文件,新的配置文件中多出来不少选项...哎,菜鸟的悲哀啊.真希望有个选项,改了以后就万事OK了...