2013-08-28 2 views
0

PHP를 사용하여 폴더의 첫 번째 파일에서 콘텐츠를 가져오고 콘텐츠가로드되면 파일을 삭제합니다. 여기에 내가 무엇을 가지고 : 그래서 아무 권한 오류를 거부하지가PHP : 폴더의 첫 번째 파일에서 콘텐츠 가져 오기 및 삭제

$a = opendir('./'); 
while (false !== ($entry = readdir($a))) { 
    if($entry != '.' && $entry != '..') { 
     echo $entry = file_get_contents('./'.$entry.'', FILE_USE_INCLUDE_PATH); 
     break; // only need the first file 
     } 
    } 

위의 코드는 폴더의 첫 번째 파일을로드하고 나는 성공적

unlink("temp.txt"); 

같은 것을 사용하여 삭제할 수 있습니다. 하지만 모든 파일 이름이 다르기 때문에 변수 이름으로 파일을 삭제하면됩니다. 놀랍게도 나를 위해, unlink("$entry"); 또는 이와 유사한 뭔가가 그 대신 그 파일의 내용의 처음 몇 줄과 함께 경고를 보여주는 그것을 삭제하지 않습니다. 내가 $entry을 echo하면 정확하게 temp.txt를 보여줍니다. 누군가가 나를 계몽 할 수 있습니까? 내가 여기서 무엇을 놓치고 있니?

() 관련 질문 : 1.txt, 2.txt, 3.txt, 10.txt와 같은 숫자 파일이있는 경우 위의 코드를 수정할 수있는 방법이 있습니까? 방법, 그것은 1,10,2,3 ...과 같은 파일을 불러 오지 않습니다. 대신 1,2,3,10 ...을로드하십시오.)

업데이트 : 작동되는 업데이트 된 코드 나중에 참조)에 대해 :

$a = opendir('./'); 
while (false !== ($entry = readdir($a))) { 
    if($entry != '.' && $entry != '..') { 
     echo $b = file_get_contents('./'.$entry.'', FILE_USE_INCLUDE_PATH); 
     break; // only need the first file 
     } 
    } 
unlink("./$entry"); 
+1

파일 내용으로'$ entry'를 덮어 쓰고 있습니다. 그래서 주기적으로, 할당 후에'$ entry'는 더 이상 유효한 파일 위치를 가리 키지 않습니다. –

+0

상대 경로를 사용하여'$ entry'를 삭제하려고하면'unlink ("./$ entry"); '이어야합니다. – MisterBla

+0

* 첫 번째 파일은 무엇을 의미합니까? – alex

답변

2

첫 번째 문제는 삭제할 때 같은 파일 이름이 더 이상 유효하지 당신이 파일의 내용 $entry을 덮어 쓰지 않습니다하고 있다는 것입니다 그것 (파일 내용에 대한 오류 설명).

두 번째로 FILE_USE_INCLUDE_PATH을 사용하고 있기 때문에 파일이 어디에 있는지 정확하게 알지 못하며 unlink은 현재 작업 디렉토리와 관련이 있습니다 (대부분 $a).

unlink($a.'/'.$entry)을 사용하면 문제가 없습니다.

관련없는 질문 인 경우 scandir을 사용하여 폴더의 모든 파일을 가져온 다음 natsort을 결과 배열에 적용하여 '자연 정렬 알고리즘'으로 정렬하십시오. 디렉토리 목록에는 항상 수동으로 검색하고 건너 뛰거나 제거해야 할 폴더 ...이 나열되어 있음을 명심하십시오.

+0

두 가지 실수를 완벽하게 설명하므로 적절하게 조정할 수 있습니다. 정말 고맙습니다! –