同样的,我上传一个名为Skype S'an.jpg的文件,magic_quotes_gpc 为on,不进行addslashes处理时,存入数据库里面的名字变成了an.jpg,把magic_quotes_gpc 设置为off,进行addslashes处理,名字就对了。奇怪~~

解决方案 »

  1.   

    function _filter(&$array)
        {
          if (!get_magic_quotes_gpc())
          {
            if (is_array($array))
            {
              foreach($array as $item)
              {
                $this->_filter($item);
              }
            }
            else
            {
              $item = addslashes($item);
            }
          }
        }可处理数组,多级数组的addslashes~~
      

  2.   

    谢谢楼上的,但是能告诉我,为什么打开magic_quotes_gpc 而不用addslashes与关闭magic_quotes_gpc 而使用addslashes的效果不一样吗?按照手册说的话,这两种情况应该是等价的啊,高手帮帮忙。
      

  3.   

    这是bug,跟addslashes无关,升级PHP版本到最新版本
      

  4.   

    bug?我刚开始发帖的时候服务器上是php4.4.0,经楼上指点,升级到了php4最新的版本php4.4.1,可是问题依旧啊,各位明白这个问题的,望不吝赐教啊
      

  5.   

    这是不是BUG还不好说,但在php4.3.2和php5,0,3中都没有发现此问题(windows环境)当magic_quotes_gpc = on时,php自动进行addslashes
    于是IMG_0'043.JPG就变成了IMG_0\'043.JPG
    注意从表现形式上看那个IMG_0变成目录了,而upload提供的源文件名是不带路径的,当然也就有问题了在服务器中保存文件时取名为什么要借助源文件名呢?我很不理解
    比如你上传了一个Skype S'an.jpg,我也上传了一个Skype S'an.jpg。你该如何处理呢?难道一定能认为是同样的文件吗?可能是名字相同而内容不同呢?
    如果因发现同名文件而覆盖的话,就可能出现混乱了
    如果因发现同名文件而改名的话,那还不如一开始就统一命名判断两个文件是否相同不能只从名字上判断
    只要内容相同,不管是什么名字都应该认为是相同的文件
      

  6.   

    判断两个文件是否相同不能只从名字上判断
    只要内容相同,不管是什么名字都应该认为是相同的文件
    ---------------------------建议使用md5_file或者sha1_file计算文件的散列值~~
      

  7.   

    在服务器中保存文件时取名为什么要借助源文件名呢?我很不理解
    -----------------------------------------------------------唠叨大哥,我保存文件的原始名字并不是为了用来检索,我对每个文件都是进行了重新命名的,保存原始文件名仅仅是方便用户,因为我们的用户很多时候会传很多图片,原始文件名是方便用户来查看的,仅此而已另外,我的问题好像还是没有解决啊,那既然当magic_quotes_gpc = on时,php自动进行addslashes,而为什么当magic_quotes_gpc = off时,手动强制进行addslashes得到的结果与前者不一样呢?
      

  8.   

    保存文件原名是必要的。不然下载时就会出问题。一般是改名存储,下载时改header恢复文件名。magic_quotes_gpc是打死也不开的,问题多多。
      

  9.   

    都跟你说了是bug,不会自己去查资料,有什么好问的?
    http://bugs.php.net/bug.php?id=31398
    Bug #31398 File Upload Original name problem with magic_quotes_gpc = On