2010-06-08 5 views
2

PHP에서 생성 된 심볼릭 링크를 사용하고 있습니다. 누군가가 다운로드를 요청하면 생성되며 매일 끝날 때마다 만료되기를 원합니다.임시 심볼릭 링크를 삭제하면 해당 심볼릭 링크에 대한 현재 다운로드/액세스가 중단됩니까?

문제는, 어떤 사람이 ... 하루가 끝나기 전에 심볼릭 링크 1 분 다운로드하고 그들이 그것을 다운로드하는 동안 나는이 심볼릭 링크를 삭제 시작하면

내 질문은 당신의 지식에,입니다 그 개인이 심 링크를 다운로드하기 바로 전에 파일을 "다운로드"할 수 있습니까? 나는 "resumable download"능력에 대해 걱정하지 않는다. 그러나 그것은 다운로드를 중단 시키거나 어떤 식 으로든 깨뜨릴 것인가?

+0

정교합니다. 귀하의 PHP 스크립트는 심볼릭 링크를 만듭니다? 사용자가 다운로드 URL로 리디렉션됩니까? 그런 다음 cron 작업이 심볼릭 링크를 삭제하기 직전에 아파치가 해당 파일을 전송하기 시작합니다 (예 : 50GB). – mario

+1

내가 이런 식으로해야하는 유일한 이유는 일부 공유 호스팅이 적용되는 "프로세스 실행"제한을 피할 수 있기 때문입니다. 다운로드 스크립트로서의 역할을하는 PHP 파일은 실행 프로세스입니다. 다운로드는 끝났지 만 - 심볼릭 링크를 사용하면 symlink를 통해 파일을 직접 다운로드하기 때문에이 문제를 해결하고 다운로드 스크립트가 곧 종료됩니다. – Joe

답변

7

예 이렇게 할 수 있습니다.

UNIX 계열 시스템 (Linux 포함)에서는 파일을 삭제하지 않습니다. 파일 이름을 삭제합니다. 현재 다른 사람이 열어 놓은 파일을 삭제하면 파일 이름은 사라지지만 파일이 닫힐 때까지 데이터는 디스크에 남아 있습니다.

심볼릭 링크를 더 많이 사용하면 심볼릭 링크를 지우면 파일 데이터가 그대로 남아 있고 파일이 열린 모든 프로세스는 파일 핸들이 아닌 파일 핸들을 참조합니다.

이후에 심볼릭 링크 을 삭제하면 스크립트가 파일을 열 때 아무 문제없이 다운로드가 완료됩니다.

+0

감사합니다. – Joe

2

웹 서버가 다운로드가 완료 될 때까지 파일을 열어 둘 때까지는 어느 정도 예상됩니다. 이 잘 작동합니다. 리눅스에서는 심지어 하드 링크을 파일로 제거 할 수 있습니다. 웹 서버는 열어 둔 채로 계속 읽을 수 있습니다.

1

그렇지 않은 경우에는 내 경험에 비추어 말합니다. 연결에 중단이 있거나 사용자가 다운로드를 일시 중지하도록 선택한 경우 브라우저가 항상 다시 시작할 수있는 것은 아닙니다 (링크가 없어 졌기 때문에).

나는

내가 무슨 짓을

, 독특한 폴더에 심볼릭 링크를 넣어 시간을 기준으로 폴더를 삭제하는 것이 었습니다 (아파치 공유 서버에) IE9x Chrome23.x Firefox17.x을 시도했습니다. 내 경우, 나는 30 분 (내 다운로드 파일에 대한 합리적인 시간) 후에 폴더를 죽이고 (심볼 링크가 포함되어있다.)

(나는이 아이디어를 얻을 수 없다 - 다른 곳에서 본 것) 매우 짧은 중단 또는 일시 중지가 때때로 복구 될 수 있다고 말합니다.

관련 문제