2009-09-29 2 views
0

PHP5에서 AJAX 요청을 사용하여 다운로드 할 일부 파일 및/또는 디렉토리를 선택할 수있는 재귀 FTP 다운로드 스크립트를 개발했습니다. 서버가받는 POST 변수는 메모리를 전혀 차지하지 않는 짧은 파이프 구분 문자열입니다.원격 가상 서버에서 FTP 다운로드가 실패하지만 로컬 설정에서 완벽하게 작동합니다.

스크립트 자체는 내 로컬 Apache 설정에서 완벽하게 작동하고 각 디렉토리로 이동하여 모든 단일 파일과 폴더를 다운로드합니다.

Media Temple에서 원격 가상 서버를 설정하면 스크립트가 큰 구조에서 실패합니다. 이는 로컬 Apache에서 잘 처리됩니다.

증상으로 인해 일부 디렉터리가 파일로 간주되므로 스크립트가 해당 디렉터리로 들어가서 추가로 다운로드하지 않습니다.

스크립트는 원격으로 열려고 시도하여 경로가 디렉토리인지 여부를 확인합니다. 디렉토리를 열 수 있으면 완료 될 때까지 반복적으로 다운로드합니다.

Media Temple에서 호스팅되는 php.ini는 로컬 설정 (긴 실행 시간이 길거나 메모리 제한이 길어짐)보다 훨씬 더 높은 임계 값을 갖기 때문에 문제가되지 않습니다. 내 로컬 php.ini를 원격 서버에서 사용하기.

일반 호스팅에서 전용 가상 서버로 전환 할 때까지 "스크립트 헤더의 조기 종료"를 가져 오는 데 사용되는 오류 로그를 확인하십시오. 이제는 전혀 반응하지 않습니다.

내가이 문제를 해결하기 위해 시도한 것은 php.ini에서 다른 값으로 실험하고 최근에 만든 모든 새 파일과 디렉토리에 대해 flush() 및 ob_flush()를 시도한 것입니다. "스크립트 헤더의 조기 말미, PHP"의 발생을 막습니다.

의견이 있으십니까?

+0

그냥 제안 ... 정중 한 질문은 '이봐!'로 시작하지 않습니다. - 그렇다면 개체를 열려고 시도하여 개체가 파일인지 또는 폴더인지 확인하는 것이 현명한 방법입니까? – pavium

+0

"안녕하세요!" :) 아니, 아주 기분이 좋지 않아. 그러나, (내가 아는 한) 그것이 dir인지 여부를 확인하는 다른 방법은 없습니다 ... FTP에는 is_dir() 함수가 없습니다. 이전에 파일의 마지막 세그먼트에서 점을 확인했습니다. 그러나 디렉토리에는 점들이 포함될 수 있으므로 나쁜 생각이었습니다. 이것은 느리지 만 정확한 결과를 제공합니다. – Christoffer

답변

0

기본적으로 코드가 어떻게 생겼는지는 모르지만 그 부분은 here (php.net maillinglist에서) 내 서버에서 제대로 작동합니다. 당신의 코드 예제를 우리에게 줄 수 있겠습니까?

+0

고마워요, 조금 속도가 올라갈 것입니다 ... 스크립트를 의도 한대로 작동시키는 지 확인하기 위해 지금 테스트를 실행하십시오 ... – Christoffer

+0

흠 ... 제공 한 새 코드는 정확한 결과를 제공합니다 . 처음에는 모든 것이 잘 작동하고 모든 것이 폴더로 다운로드되기 시작합니다. (Epiphany! Doh! FTP 연결은 스크립트가 눈치 채지 않고 닫혔을 것입니다 : S 발견하면 알려 드리겠습니다.) – Christoffer

+0

예, 이제 작동합니다 ...그러나 그것은 약 20 배 더 빠른 내 로컬 설정보다 여전히 느리다. – Christoffer

0

아마도 액세스 문제 일 수 있습니다. Linux에서 실행하고 있습니까? VM은 dev-box와 같은가요? 아파치를 실행하는 사용자에게 디렉토리를 읽을 수있는 충분한 권한이 있습니까?

+0

서버에서 Linux CentOS 5가 실행 중이고 devbox에서 우분투 9.04가 실행 중입니다. 권리는 문제가되지 않는 것 같아요 ... 설명에서 분명하지 않았습니다. 그것은 잠시 동안 완벽하게 작동합니다. 일부 파일 및 디렉토리는 모두 잘 다운로드됩니다. 그러나 얼마 후 일부 디렉토리는 파일로 간주되고 스크립트는 많은 일을 끝내지 만 끝내지는 못합니다. – Christoffer