2013-01-18 3 views
1

문제의 파일 작성을 생각하는 것이 문제가되는 기능에 조금 뒤떨어지며 이름 바꾸기를 호출하기 전에 잠시 기다려보십시오. 호출되는)이 구성에서 PHP file_exists이지만 이름 바꾸기가 실패합니다 "No such file or directory ..."?

$no_file = 1; 
while($no_file && $no_file < 300) 
{ // generation of Worksheet.xls may lag behind function -- WAIT FOR IT 
    if(file_exists($old_path)) 
    { $no_file = 0; 
     rename($old_path, $new_path); 
    } else $no_file++; 
} 
if($no_file) die("Error: Worksheet.xls not found"); 

, 나는 true를 반환) (단 file_exists 경우 호출 할 수 있습니다) (이름을 생각하고 있어요,하지만 내 인생 내가 왜 다음 (이름을 변경하는 방법/알아낼 수 없습니다 \ WAMP \ www가 \ demox/WP - 콘텐츠/플러그인/고양이 남자/매장 관리/요약/워크 시트/Worksheet.xls : 이름 바꾸기 (C : 그리고 ...

PHP 경고를 반환 실패 C : \ wamp \ www \ demox/wp-content/plugins/cat-man/store-manager/summary/statements/TESTING/2012/Worksheet.xls) 해당 파일 또는 디렉토리가 없습니다.

+0

이 문제가 핵심이지만 DIRECTORY_SEPARATOR 상수로 슬래시를 대체 해보십시오. – JanL

답변

8

아마도 statements/TESTING/2012/이 존재하지 않는다고 말하고있을 것입니다. 파일을 저장할 수 있도록 mkdir()으로 해당 디렉토리를 작성하십시오.

mkdir('C:\wamp\www\demox/wp-content/plugins/cat-man/store-manager/summary/statements/TESTING/2012/', 777, true); 
+0

후속 조치에 감사드립니다. 이상한 ... 때로는 효과가 있습니다 ... 때로는 그렇지 않고 디렉토리를 만드는 것만으로는 더 복잡해집니다. 파일이 열리면 Windows 플랫폼의 이름 바꾸기 문제에 대해 뭔가 알기 전에 (어딘지 찾을 수없는) 어딘가에서 읽습니다 ... 미리 읽기 ... 주어진 세션에서 이전에 이름이 변경 되었습니까? 좀 더 파고해야 겠어. – WallabyKid

1

그러나이 코드는 원격이며 파일이 존재하는지 확인하고 이름을 바꾸는 사이에 파일을 변경할 수있는 경쟁 조건이 발생할 수 있습니다. try/catch 블록에서 즉시 이름 바꾸기를 시도하고 실패를 직접 처리하는 것이 좋습니다.

명시 적으로 이름 변경 후 break 문 루프를 종료한다. 그리고 이름 바꾸기가 조기에 승리를 축하하기 전에 $no_file = 0;을 설정하십시오. 당신은 지연의 목적으로 반복하는 경우 또한

는, 당신은 PHP가 그것을 처리 할 수 ​​그렇지 않으면 루프는 최대한 빨리 완료, 실행을 잘해야합니다. time_nanosleep을 살펴보십시오. while 루프 당신이 매우 빠르게 완료 볼 수있는 시간 당신에게하는 경우 :

$time_start = microtime(true); 
$x = 0; 
while ($x < 300) { 
    file_exists("index.php"); 
    $x++; 
} 
echo sprintf("300 loops in %.9f seconds", microtime(true) - $time_start); 

// 300 loops in 0.000626087 seconds 
1

좋아, (가) 문제를 해결했다 MKDIR! 여기에 해결책이 있습니다.

$old_path = $smry_dir."worksheets/Worksheet.xls"; 
if(@$store_options->paypal_live ==='false') 
{ $new_path = $smry_dir."statements/TESTING/$reporting_year"; 
} else $new_path = $smry_dir."statements/$reporting_year"; 
if(!is_dir($new_path)) mkdir($new_path, 777, true); 
rename($old_path, $new_path."/Worksheet.xls"); 

모든 도움에 다시 한 번 감사드립니다! DIR 문은 항상 존재하며 rename()이 불만없이 $ reporting_year라는 단일 하위 디렉터리를 새로 작성하지만 재귀 하위 "TESTING/$ reporting_year"을 작성할 수는 없다는 것을 알았습니다. 구조에

에서 mkdir의 재귀 매개 변수!

관련 문제