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