我用rename对文件进行重名名当我在rename中的参数指定具体来讲具体文件是能重命名,为什么当我指定变量不行
比如  rename("D:\xx\xx.JPEG","D:\xx\ss.JPEG"); 能够重命名成功
  而  $a="D:\xx\xx.JPEG"  $b="D:\xx\ss.JPEG"   rename($a,$b);  当我指定变量时为什么不行?

解决方案 »

  1.   


    //do it like this$a="D:/www/test/demo.php";
    $b="D:/www/test/demo2.php";
    rename("$a","$b");
    //测试了可以的。。使用正斜线吧
      

  2.   

    rename("D:\xx\\xx.JPEG","D:\xx\\ss.JPEG");  //加个\ 就可以,要转义吧,或者用4楼的  
      

  3.   

    Warning: rename(D:/PHP/pic111331693392.jpg ,D:/PHP/pic111331693392.jpg) [function.rename]: 文件名、目录名或卷标语法不正确。
      

  4.   

    因为我的路径是重数据库里面得到的。所以我定义变量接收 但是用变量不能重命名,而当我把变量的值输入rename中  又能重命名
      

  5.   

     
      $a="D:\xx\\xx.JPEG" ;
     
     $b="D:\xx\\ss.JPEG" ;
     
     rename($a,$b);    
      

  6.   

    rename(D:/PHP/pic111331693392.jpg ,D:/PHP/pic111331693392.jpg)名字一样。
      

  7.   

    刚那个回复错误了。应该是这样
    Warning: rename(D:/PHP/pic133169357800.jpg ,D:/PHP/picA133169357800.jpg) [function.rename]: 文件名、目录名或卷标语法不正确。
      

  8.   

    报的错 是我回复11L的。 $a 和$b不一样的
      

  9.   

    使用 rename 时需先确认源文件存在和目标文件不存在,否则必然报错
    比如 $a、$b 分别会源文件和目标文件文件名,则
    if(file_exists($a) && !file_exists($b)) {
      rename($a, $b);
    }else {
      echo '不能更名';
    }
      

  10.   

    $pg=@pg_connect(" host=localhost user=postgres password=admin888 dbname=images");//连接服务器
    $id=$_POST['upId'];

    $se_query="select name from images where id=$id";

    $result=@pg_query($pg,$se_query); $arr = @pg_fetch_array($result,0, PGSQL_ASSOC);
    //var_dump($arr)."<br>";

    $name=$_POST['upName'];       //得到页面输入的文件名

    $address=$_POST['upAddress']; //得到页面输入的地址

    $aa=$arr["name"];

    $v="D:/PHP/".$aa;
    echo $v."<br>";

    $patch="D:/PHP/".$name;

    echo $patch."<br>";


    $up_query="update images set name='$name' where id=$id" ;
    $result=@pg_query($pg,$up_query);
    if(@pg_num_rows($result)==1)
    {
    echo ("<script type='text/javascript'>alert('更新失败!');</script>");
    }
    else
    {
    rename("$v", "$patch");
    echo ("<script type='text/javascript'>alert('更新成功!');</script>");
    }
    真的不知道错在哪里了。  请给位大哥教教小弟。
      

  11.   

    pg_affected_rows -- 返回受影响的记录数目$up_query="update images set name='$name' where id=$id" ;
    $result=@pg_query($pg,$up_query);
    if(@pg_num_rows($result)==1) 这个要用 pg_affected_rows,因为你是在 update。另外分支也返了对于 rename("$v", "$patch");
    请贴出 $v, $patch 的值
      

  12.   

    Warning: rename(D:/PHP/pic111331693387.jpg ,D:/PHP/pic111331693387AAA.jpg) [function.rename]: 文件名、目录名或卷标语法不正确。  
    这个是我报的错。
      

  13.   


    if(file_exists($v) && !file_exists($patch) ) {

    $up_query="update images set name='$name' where id=$id" ;
    $result=@pg_query($pg,$up_query);
       rename($v, $patch);
       echo ("<script type='text/javascript'>alert('更新成功!');</script>");
    }
    else
    {
    echo ("<script type='text/javascript'>alert('更新失败!');</script>");

    }Warning: rename(D:/PHP/pic1331715077.jpg ,D:/PHP/picQQ1331715077.jpg) [function.rename]: 文件名、目录名或卷标语法不正确。大哥。同样会报错的、主要问题是在那个用rename方法重命名的时候报错。
      

  14.   

    但是当我这样用rename的是后不报错, rename("D:/PHP/pic1331715077.jpg","D:/PHP/picQQ1331715077.jpg");
      

  15.   

    现在的主要问题是。就算我不写更新方法。他rename还是执行不成功!我觉得跟更新方法没关系。在说我更新的知识数据库的东西。我把修改的文件名更新到数据库不就行了。
      

  16.   

    $fn = 'D:/PHP/pic1331715077.jpg'
    echo $fn . (file_exists($fn) ? '' : '不') . '存在';$fn = 'D:/PHP/picQQ1331715077.jpg'
    echo $fn . (file_exists($fn) ? '' : '不') . '存在';
      

  17.   

    rename(D:/PHP/pic111331693387.jpg ,D:/PHP/pic111331693387AAA.jpg)
    是不是D:/PHP/pic111331693387.jpg 后面多个空格的原因啊,去掉试试?
      

  18.   

    <?php/* TODO: Add code here */
    $aa="pic111331693387AAA.jpg";
    $name="123.jpg";
    $v="D:/PHP/".$aa;
    $patch="D:/PHP/".$name;rename($v, $patch);//rename("$v", "$patch"); 也是ok的
    ?>
    我这样是ok的,所以我认为是楼主文件在那个盘不存在导致的,仔细看看呗
      

  19.   

    图片在我的物理路径是一定能找到的,因为我前面实现的是文件上传的功能。现在就是想将数据库里面的文件名读取出来,然后进行重命名。也就是修改功能。所以在上面的$aa是我从数据库读取出来的修改前的文件名,而后面的$name是页面提交的给定重命名的名称,路径这些都没有错。但是就是一直报[function.rename]: 文件名、目录名或卷标语法不正确。这个错误。以前有那位大哥遇到过这样的错误么。跪求@@@@@@@@@@@@@@@@@@@@@@@@@@
      

  20.   

    17楼说的你写反了,你是不是改过了
    或者你直接把rename("$v", "$patch"); 写到 $up_query="update images set name='$name' where id=$id" ; 之前,试试看,是不是根本就没运行到那一步啊
      

  21.   

    推荐以后都使用/,这样就算移植到linux上也没关系,LINUX只识别/
      

  22.   

    $pg=@pg_connect(" host=localhost user=postgres password=admin888 dbname=images");//连接服务器
    $id=$_POST['upId'];
    $se_query="select name from images where id=$id";
    $result=@pg_query($pg,$se_query);
    $arr = @pg_fetch_array($result,0, PGSQL_ASSOC);
    $name=$_POST['upName'];       //得到页面输入的文件名
    $address=$_POST['upAddress']; //得到页面输入的地址
    $aa=$arr["name"];             //将数据库存储的图片名赋值给$aa
    $v="D:/PHP/".$aa;   //拼接图片地址
    $patch="D:/PHP/".$name;   
    if(file_exists($v) && !file_exists($patch) ) {
     rename($v, $patch);
    $up_query="update images set name='$name',address='$patch' where id=$id" ;
    $result=@pg_query($pg,$up_query);
     
       echo ("<script type='text/javascript'>alert('更新成功!');</script>");
    }
    else
    {
    echo ("<script type='text/javascript'>alert('更新失败!');</script>");
    }
    这是我现在的代码!!貌似rename在update前后没关系的