2011-04-06 6 views
0

이것은 문자 그대로 몇 시간 동안 나를 괴롭 히고 있습니다.파일을 출력 할 때 PHP 컬링이 데이터를 다운로드하지 못하지만 표준 출력으로 인쇄 할 때 괜찮습니다.

PHP cURL이 데이터를 파일에 다운로드하지 않는 이유를 알 수없는 것처럼 보입니다. (CURLOPT_FILE이 로컬 파일로 설정되었습니다.) 데이터가 없습니다. 필자는 주기적으로 대상 파일의 파일 크기를 확인하며 항상 0입니다. 배경을 제공하기 위해 테스트 용으로 90kb jpeg 파일을 다운로드합니다.

내 로컬 컴퓨터 (XP)에서 작동하지만 현재 작업하고있는 웹 사이트 (Windows Server 2003)에서는 작동하지 않습니다.

시나리오를 더욱 이상하게 만든 몇 가지 테스트를 수행했습니다.

  1. I 장애인 CURLOPT_FILE

    표준 출력으로 컬에 의해 반환 된 데이터를 인쇄하고, 바이너리 데이터는 인쇄.

  2. 서버가 액세스 제어를 구현하기 전에 차단 된 웹 사이트를 경험 한 후 Internet Explorer에서 파일에 액세스하려했는데 볼 수있었습니다.

  3. 차단 된 다운로드가 발생하기 전에 Internet Explorer에서 파일을 다운로드하려고 시도했는데 다운로드되었습니다.

  4. 파일은 fopen ('', 'w')에 의해 만들어 지지만 크기는 0으로 유지됩니다.이 성공적인 파일 생성에도 불구하고 PHP에 파일 시스템 쓰기 권한에 문제가있는 것 같아요. 관리자가 아닌 사용자도 마찬가지입니다. 아직 다운로드가 없습니다.

아무에게도 이런 일이 발생 했습니까?

모든 포인터가 제공됩니다. 나는 정말로 붙어있다.

감사합니다.

$connection = curl_init($src); 

// If these are not set, curl_exec outputs data. 
// If these are set, curl_exec does not send any data to the file 
// pointed to by $file_handler. $file_handler is not null 
// because it is opened as write (non-existing file is created) 

curl_setopt($connection, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($connection, CURLOPT_FILE, $file_handler); 

PS를 :

다음은 컬 옵션은 내가 설정의 내가 명령 줄이 아닌 브라우저를 사용하여 테스트를하고 있어요.

+0

나는 아직도 이것을 이해할 수 없다.그 동안 데이터를 직접 파일에 저장했습니다. RETURNTRANSFER가 true로 설정되어 있기 때문에 바이트는 컬에서 리턴되었습니다. 이들은 fwrite를 사용하여 파일에 기록되었습니다. 나는 이것을 피하고 cURL이 버퍼링을 수행하도록하고 싶었지만 (있는 경우). –

답변

1

파일에 쓸 수있는 권한이 없을 수 있습니다.

+0

또한 PHP 버전을 확인하십시오. PHP 버전에 따라 curl이 때때로 실패 할 수 있습니다 (다른 방법, 무엇이든, 또는 추가 옵션이 도중에 추가됩니다.) 그리고 php가 파일 쓰기에 어떤 레벨이 있는지, 어떤 사용자가 실행하는지, 그리고 그 사용자가 권한을 가지고 있는지 확인하십시오. writiing하기 전에 항상 파일을 만져서 chmod하면 777으로 chmod 정말 보장합니다. – jpalala

1

CURLOPT_RETURNTRANSFER를 설정하지 않아도되고 명령 줄에서 실행중인 경우 관리자 권한으로 PHP를 실행해야합니다. Windows에서는 작동하지만 Linux에서는 항상 모든 명령 줄 스크립트를 sudo해야합니다.

또한 PHP 안전 모드가 켜져 있으면 해당 디렉토리에 PHP 파일과 동일한 (UID) 소유자도 지정해야합니다. Hmh하지만 파일을 만들 수 있기 때문에 (0 파일 크기로) 권한과 아무런 관련이 없을 수도 있습니다 ... 서버의 * open_basedir * PHP 설정을 확인할 수 있습니까? 설정되어 있으면 cUrl은 파일 프로토콜을 사용할 수 없습니다 ... 서버에서 로그 파일을 확인 했습니까? 어쩌면 오류가있을 수 있습니다.

0

PHP를 실행하는 사용자 (php를 호출하는 사용자)가 파일의 디렉토리 또는/path/to /에 기록 할 수있는 권한이없는 경우 php를 실행하는 사용자를 파악해야 할 수 있습니다. 파일을 수정하려면 파일 권한을 조정해야 할 수 있습니다.

관련 문제