我正在修复一些旧代码,该代码应根据客户的姓氏为客户创建目录。 1000次中的999次按预期工作但偶尔会出现“无法创建基本目录”错误消息,调试显示$file_directory
在这种情况下只是"Array"
而不是类似于"\\network\path\order_data\1234567890_Smith"
。
有没有人可以解释这段代码在绝大部分时间内是如何工作的,但仍然会导致大约0.1%的实例失败?或者它不是代码?谢谢!
注意:我最初没有编写此代码,但我希望尽可能接近原始代码
编辑我之前的代码中有一个拼写错误,但我认为tliokos和Fluinc有一个非常好的观点,但只是想解决我的错误
代码:
<?php
$file_directory = build_directory($customer, $UID);
if(!is_dir($file_directory)){ //Check to make sure it does not already exist
if(!mkdir($file_directory)){
mail("debug@example.com","Unable to create base directory","$file_directory");
}
}
function build_directory($customer, $UID){
if($customer->related_orders){
$related = explode(",", $customer->related_orders);
foreach($related as $r_UID){
$rel_order = get_order($r_UID); //fetches order object
if((isset($rel_order->file_directory) && $rel_order->file_directory != "")){
return $rel_order->file_directory;
}
}
}
//Here is where I made my correction
$paths = array('\\\\network\\path');
$base = $paths[0];
//Test if directory is already assigned
if(is_dir($base . "\\order_data\\".$UID."_".str_replace(" ","_",$customer->last_name)."\\")){
return $base . "\\order_data\\".$UID."_".str_replace(" ","_",$customer->last_name)."\\";
}
if($base){
return $base . "\\order_data\\".$UID."_".str_replace(" ","_",$customer->last_name)."\\";
}
}
?>
答案 0 :(得分:1)
更改$ base = array('\\ network \ path');
To $ base ='\\ network \ path';
答案 1 :(得分:1)
我认为问题出在build_directory()函数中,更具体地说是在第一个if之后。
因此,如果客户没有相关订单,那么您正在尝试使用字符串连接数组,结果就像
Array\order_data\....
尝试更改
$base = array('\\network\path');
到
$base = '\\network\path';
答案 2 :(得分:0)
因此问题最终与框架/用户相关。 我们发现,如果用户在创建目录期间刷新页面,它将创建两次相同的目录,我们的框架将保存为相同路径的数组。