cakephp 2.3.x或PHP需要重命名目录中的所有视频文件-获取错误

cakephp 2.3.x或PHP需要重命名目录中的所有视频文件-获取错误,php,file,cakephp,video,rename,Php,File,Cakephp,Video,Rename,我在MacOSX上的MAMP服务器上使用CakePHP2.3.1。我在尝试使用rename($oldname,$newname)时遇到问题;因为我总是会遇到以下错误: 致命错误 错误:允许的内存大小33554432字节已用尽(尝试分配9662464字节) 文件:/Users/esjenkins/Sites/cakephp/app/View/Layouts/default.ctp 线路:56 我尝试将文件夹的权限设置为“所有人读/写” 如果我注释掉重命名($oldname,$newname);我可

我在MacOSX上的MAMP服务器上使用CakePHP2.3.1。我在尝试使用rename($oldname,$newname)时遇到问题;因为我总是会遇到以下错误:

致命错误

错误:允许的内存大小33554432字节已用尽(尝试分配9662464字节)
文件:/Users/esjenkins/Sites/cakephp/app/View/Layouts/default.ctp
线路:56

我尝试将文件夹的权限设置为“所有人读/写”

如果我注释掉重命名($oldname,$newname);我可以得到每个循环中这两个变量的回音。例如:

$oldname=/Users/esjenkins/Sites/cakephp/app/webroot/files/asdfasf2929.mp4

$newname=/Users/esjenkins/Sites/cakephp/app/webroot/files/2929.mp4

下面是我的视图文件夹文件list_.ctp中的PHP代码

<div class="dances index">
    <h3><?php echo 'Adjudication Files'; ?></h3>
    <?php
    $adjudication_path = APP . 'webroot/files/'; 
    if ($handle = opendir($adjudication_path)) {

        /* This is the correct way to loop over the directory. */
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != ".." && $entry != ".DS_Store" && $entry != "empty") {
            $adj_file_string = "$entry\n"; 
                //echo $adj_file_string . " <br /> <br /> ";
                $rename_adj_file_string = substr($adj_file_string, -9, 8);
                //echo $rename_adj_file_string . " <br /> <br /> ";
                $oldname = $adjudication_path . $adj_file_string;
                $newname = $adjudication_path . $rename_adj_file_string;
                echo $oldname . " | " . $newname . " <br /> <br /> "; 
                rename($oldname, $newname);
            }
        }

        closedir($handle);
    }
    ?>

我有大约750个裁决文件,上传后需要重命名

提前谢谢

更新:尝试在循环中重命名不起作用(根据下面thaJeztah的建议)。我能够成功地使用重命名($oldname,$newname);在循环之外。我将更多地尝试将文件名放入数组,稍后将报告结果

答:我无法使rename()在任何循环中工作,即使出于某种原因使用了数组。但我确实通过将此代码放入控制器中使事情正常运行:

public function list_adjudication() {
    $adjudication_path = APP . 'webroot/files/';
    $dir = new Folder($adjudication_path);
    $files = $dir->find('.*\.mp4');
    //print_r($files);
    foreach ($files as $file) {
        //$file = new File($dir->pwd() . DS . $file);
        echo $file . " <br /> ";  
        //$contents = $file->read();
        // // $file->write('I am overwriting the contents of this file');
        // // $file->append('I am adding to the bottom of this file.');
        // // $file->delete(); // I am deleting this file
    $newName = substr($file, -8, 8);
    //echo $newName; exit;
    rename($adjudication_path . $file, $adjudication_path . $newName); 
    }
        //$file->close(); // Be sure to close the file when you're done
}
公共功能列表{
$tradication_path=APP.'webroot/files/';
$dir=新文件夹($u路径);
$files=$dir->find('.\.mp4');
//打印(文件);
foreach($files作为$file){
//$file=新文件($dir->pwd().DS.$file);
echo$文件。“
”; //$contents=$file->read(); ////$file->write('我正在覆盖此文件的内容'); ////$file->append('我正在添加到此文件的底部'); ////$file->delete();//我正在删除此文件 $newName=substr($file,-8,8); //echo$newName;退出; 重命名($DIRECATION_path.$file,$DIRECATION_path.$newName); } //$file->close();//完成后一定要关闭文件 }
我不确定把这个代码放在控制器中是否合适,或者放在模型中是否合适。我对CakePHP和一般的编码非常陌生。一旦我过了主要的最后期限,我就要回去尝试从头开始学习博客教程,以便更好地掌握基础知识


非常感谢@thaJeztah再次帮助克服了一个重大障碍。再救我一次。非常感谢。

增加php.ini中的内存限制

您可以通过多种方式增加内存限制

  • 直接使用php.ini文件

    内存限制=2048M

  • via.htaccess

    php_值内存_限制2048M

  • 或使用

    ini设置(“内存限制”,“2048M”)


  • 在您的应用程序中。

    在CakePHP中找不到php.ini。我只尝试重命名5个文件以开始。我认为这不应该是任何内存问题。它在你的php文件夹中,php已经安装在你的mac上。在这样一段简单的代码中出现内存耗尽是一个警告,表明出了问题。在这种情况下,盲目增加内存限制是一个不好的建议!此外,如果您阅读了错误消息;当前的内存限制是32MB,对于大多数情况来说应该足够了。这是视图/控制器中唯一发生的事情吗?这些文件真的被重命名了吗?如果只是重命名单个文件,而不是在循环内,会发生什么情况?只是想知道在循环内重命名是否会导致问题,因为重命名该文件会影响目录中其他文件的位置(例如,File1是第一个文件,但重命名后会成为第二个文件)。您可以尝试先收集数组中的所有文件名,然后在数组中循环并重命名每个文件。我认为我的控制器中没有任何相关的内容,但我会在进行更多实验后发布控制器。我喜欢您尝试在循环之外重命名的方法。我能够通过重命名(“/Users/esjenkins/Sites/cakephp/app/webroot/files/aqwer1420.mp4“,“/Users/esjenkins/Sites/cakephp/app/webroot/files/1420.mp4”)成功地在循环外重命名;我会继续做更多的实验,看看还能找到什么。在循环内重命名可能是问题所在。我将尝试您的建议,先收集数组中的文件名。这段代码完全不适合放在视图文件中。@AD7six这将是我的下一个建议,但我试图首先将重点放在问题本身上:o)此外,使用可能更为复杂的PHP。。