动态创建目录 returns "Array" 1000 次
Dynamically created directory returns "Array" 1 in 1000 times
我正在修复一些旧代码,这些代码应该根据客户的姓氏为客户创建目录。 1000 次中有 999 次按预期工作,但我时不时收到一条 "Unable to create base directory" 错误消息,调试显示 $file_directory
在那种情况下只是 "Array"
而不是类似"\network\path\order_data34567890_Smith"
.
任何人都可以解释一下这段代码如何在大多数情况下都能正常工作,但仍然在约 .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)."\";
}
}
?>
更改 $base = array('\\network\path');
至 $base = '\\network\path';
我认为问题出在 build_directory() 函数中,更具体地说是在第一个 if 之后。
因此,如果客户没有相关订单,您尝试将数组与字符串连接起来,结果类似于
Array\order_data\....
尝试改变
$base = array('\network\path');
到
$base = '\network\path';
所以问题最终与 framework/user 相关。
我们发现,如果用户在目录创建期间刷新页面,它会创建相同的目录两次,我们的框架会将其保存为相同路径的数组。
我正在修复一些旧代码,这些代码应该根据客户的姓氏为客户创建目录。 1000 次中有 999 次按预期工作,但我时不时收到一条 "Unable to create base directory" 错误消息,调试显示 $file_directory
在那种情况下只是 "Array"
而不是类似"\network\path\order_data34567890_Smith"
.
任何人都可以解释一下这段代码如何在大多数情况下都能正常工作,但仍然在约 .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)."\";
}
}
?>
更改 $base = array('\\network\path');
至 $base = '\\network\path';
我认为问题出在 build_directory() 函数中,更具体地说是在第一个 if 之后。
因此,如果客户没有相关订单,您尝试将数组与字符串连接起来,结果类似于
Array\order_data\....
尝试改变
$base = array('\network\path');
到
$base = '\network\path';
所以问题最终与 framework/user 相关。 我们发现,如果用户在目录创建期间刷新页面,它会创建相同的目录两次,我们的框架会将其保存为相同路径的数组。