尝试使用mailReader.php复制文件时丢失变量值

尝试使用mailReader.php复制文件时丢失变量值,php,Php,我正在使用此处找到的mailReader脚本: 我正在尝试在上载到另一个文件夹后复制文件。 文件将正确上载到脚本所在的文件夹。 当我尝试运行copy命令时,filename变量为空 下面是我正在使用的代码部分:最后三行是我添加的 private function saveFile($filename,$contents,$mimeType = 'unknown'){ $filename = preg_replace('/[^a-zA-Z0-9_-]/','_',$filename);

我正在使用此处找到的mailReader脚本:

我正在尝试在上载到另一个文件夹后复制文件。 文件将正确上载到脚本所在的文件夹。 当我尝试运行copy命令时,filename变量为空

下面是我正在使用的代码部分:最后三行是我添加的

private function saveFile($filename,$contents,$mimeType = 'unknown'){
    $filename = preg_replace('/[^a-zA-Z0-9_-]/','_',$filename);

    $unlocked_and_unique = FALSE;
    while(!$unlocked_and_unique){
        // Find unique
        $name = time() . "_" . $filename;
        $name = substr_replace($name,".pdf",-4); // added 1-19-2016
        while(file_exists($this->save_directory . $name)) {
            $name = time() . "_" . $filename;
            $name = substr_replace($name,".pdf",-4);
        }
        // Attempt to lock
        $outfile = fopen($this->save_directory.$name,'w');
        if(flock($outfile,LOCK_EX)){
            $unlocked_and_unique = TRUE;
        }else{
            flock($outfile,LOCK_UN);
            fclose($outfile);
        }
    }
    fwrite($outfile,$contents);
    fclose($outfile);

    if (copy($this->save_directory.$name, "/attachments/" . TRANS_ID . "/". $name)) {
        unlink( $this->save_directory.$name );
    }
我通过电子邮件收到文件已上载的确认,然后收到另一封带有错误消息的电子邮件

警告:复制(/attachments/W7652222-546/1453406138_residential-print_from_td.pdf):无法打开流:第224行的/home/myhost/public_html/mailreader/mailreader.php中没有此类文件或目录

224是我添加的代码的行号

/attachments前面缺少源文件名


有人有什么想法吗?

$name是在while循环中定义的,在更高的作用域中可能无法访问。我的建议是将代码更改为:

private function saveFile($filename,$contents,$mimeType = 'unknown'){
    $filename = preg_replace('/[^a-zA-Z0-9_-]/','_',$filename);

    $unlocked_and_unique = FALSE;
    $name = '';
    while(!$unlocked_and_unique){
        // Find unique
        $name = time() . "_" . $filename;
        $name = substr_replace($name,".pdf",-4); // added 1-19-2016
        while(file_exists($this->save_directory . $name)) {
            $name = time() . "_" . $filename;
            $name = substr_replace($name,".pdf",-4);
        }
        // Attempt to lock
        $outfile = fopen($this->save_directory.$name,'w');
        if(flock($outfile,LOCK_EX)){
            $unlocked_and_unique = TRUE;
        }else{
            flock($outfile,LOCK_UN);
            fclose($outfile);
        }
    }
    fwrite($outfile,$contents);
    fclose($outfile);

    if (copy($this->save_directory.$name, "/attachments/" . TRANS_ID . "/". $name)) {
        unlink( $this->save_directory.$name );
    }

我希望这能解决您的问题

$name是在while循环中定义的,可能无法在更高的作用域中访问。我的建议是将代码更改为:

private function saveFile($filename,$contents,$mimeType = 'unknown'){
    $filename = preg_replace('/[^a-zA-Z0-9_-]/','_',$filename);

    $unlocked_and_unique = FALSE;
    $name = '';
    while(!$unlocked_and_unique){
        // Find unique
        $name = time() . "_" . $filename;
        $name = substr_replace($name,".pdf",-4); // added 1-19-2016
        while(file_exists($this->save_directory . $name)) {
            $name = time() . "_" . $filename;
            $name = substr_replace($name,".pdf",-4);
        }
        // Attempt to lock
        $outfile = fopen($this->save_directory.$name,'w');
        if(flock($outfile,LOCK_EX)){
            $unlocked_and_unique = TRUE;
        }else{
            flock($outfile,LOCK_UN);
            fclose($outfile);
        }
    }
    fwrite($outfile,$contents);
    fclose($outfile);

    if (copy($this->save_directory.$name, "/attachments/" . TRANS_ID . "/". $name)) {
        unlink( $this->save_directory.$name );
    }


我希望这能解决您的问题

我最终在私有函数saveToDb中定义了一个email\u id常量,然后在完成所有其他操作后运行一个脚本,使用email\u id查询表,并在移动文件的记录中循环

我最终在私有函数saveToDb中定义了一个email\u id常量,然后在所有其他操作完成后运行一个脚本,使用email\u id查询表,并在移动文件的记录中循环

PHP变量有函数作用域,而不是块作用域。变量应该是可用的(它永远不会被重置),但在loop@Alex2php它包含
$name
的最后一个值,它成功地打开并锁定了其中的一个。@alex2ppp奇怪的是,错误显示了copy命令的目标部分,但源是空的。两者都使用$name变量。目标路径在代码开头创建。chdir(“附件/”);如果(!file_存在($trans_id)){mkdir($trans_id,0777);}chdir(“…”);PHP变量有函数作用域,而不是块作用域。变量应该是可用的(它永远不会被重置),但在loop@Alex2php它包含
$name
的最后一个值,它成功地打开并锁定了其中的一个。@alex2ppp奇怪的是,错误显示了copy命令的目标部分,但源是空的。两者都使用$name变量。目标路径在代码开头创建。chdir(“附件/”);如果(!file_存在($trans_id)){mkdir($trans_id,0777);}chdir(“…”);什么使您认为filename变量为空?错误消息只是说目标目录不存在
copy
将创建目标文件,但它不会创建
W7652222-546
。该文件存在于源目录中,目标文件夹确实存在:(/attachments/W7652222-546/1453465663_-nitro.pdf)我收到与您修改的代码完全相同的错误。是什么使您认为filename变量为空?错误消息只是说目标目录不存在
copy
将创建目标文件,但它不会创建
W7652222-546
。该文件存在于源目录中,并且目标文件夹确实存在:(/attachments/W7652222-546/1453465663_-nitro.pdf)我收到与您修改的代码完全相同的错误。