2015-04-23 204 views
1

我有一个laravel资源控制器中的更新控制器功能,它非常基本。正常更新数据库中的标题,正文等(数据更新没有问题)。文件重命名不再起作用

问题出在图像上。我的每个项目的图像目录都遵循一个基于项目标题的命名约定。我构建了更新函数,以便在标题更改后重命名目录和图像。我一建立它就能正常工作,但它突然停止。该目录重命名,但文件没有。这里是控制器的相关代码片段:

$count = 0; 
    $slug = Input::get('title'); 
    $prefix = Str::slug($slug); 
    $oldPrefix = $project->imagesprefix; 
    $path = public_path().'/img/projects/'; 
    $directory = $path . $prefix; 

    rename($path.$oldPrefix, $directory); 

    //dumped directory here and it's definitely set 
    $files = preg_grep('~\.(jpg)$~', scandir($directory)); 

    //dumped $files here and the array is definitely set 
    foreach($files as $file){ 
     rename($directory.'/'.$file, $directory.'/'.$prefix.'-'.$count.'.jpg'); 
     ++$count; 
    } 
    rename($directory.'/thumbnails/'.$oldprefix.'-thumb.jpg', $directory.'/thumbnails/'.prefix.'-thumb.jpg'); 

所有这些在今天下午测试时工作正常。现在它更新数据库,重命名目录文件夹但无法重命名文件。我已经在循环之前转储了$ files和$ directory,并且它们都被设置了。

+2

你检查过文件权限吗? 'ls -l' – Alupotha

+0

就是这样。我可以坐在那面一年,甚至没有想到它。每次重命名目录后,你是否必须重置权限?我曾创建了一个0777,我认为它将保持不变。 –

回答

0

如果文件重命名失败,那么这通常与权限有关。

+0

问题在于动态创建的图像上传目录。创建时我将它设置为777,但它不适用这些奇怪的权限。它一直只应用只读。我只需要深入研究一下Laravels的'File :: makeDirectory()'方法,看看它是如何工作的。我没有做任何不寻常的事情,只是通过了昨天早上工作正常的方法和许可。 –