1

我在 Mac OSX 上的 MAMP 服务器上使用 CakePHP 2.3.1。当我尝试使用 rename($oldname, $newname); 时遇到问题 因为我总是收到以下错误:

致命错误

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

我尝试将文件夹的权限设置为每个人读/写。

如果我注释掉 rename($oldname, $newname); 对于每个循环中的这两个变量,我可以得到一个回声。举个例子:

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

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

这是我的 View 文件夹文件中名为 list_adjudication.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 的建议如下)。我能够成功使用 rename($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
}

我不确定是否可以将这段代码放在控制器中,或者将它放在模型中是否合适。我对 CakePHP 和一般的编码非常陌生。一旦我过了一个主要的截止日期,我就会回去尝试从头开始学习博客教程,以更好地掌握基础知识。

非常感谢@thaJeztah 再次帮助克服了一个主要障碍。再次拯救我的屁股。非常感谢。

4

1 回答 1

-1

增加 php.ini 中的 memory_limit

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

  1. 直接php.ini文件,

    memory_limit = 2048M

  2. 通过 .htaccess

    php_value memory_limit 2048M

  3. 或使用

    ini_set('memory_limit', '2048M');

在您的应用程序中。

于 2013-03-16T16:15:42.767 回答