2013-04-10 5 views
3

공유 호스팅에서 실행되는 클라이언트에 대해 PHP CLI 스크립트를 작성하고 있습니다. 이 같은 간단한 기능을 사용하여 파일에 기록합니다스트림을 열지 못했습니다 : 열려있는 파일이 너무 많습니다.

function log_entry($msg) { 
    global $log_file, $log_handle; 
    $msg = "[".date('Y-m-d H:i:s')."] ".$msg."\n"; 
    echo $msg; 
    $log_handle = fopen($log_file, 'a'); 
    fwrite($log_handle, $msg); 
} 

그리고이 오류를 얻을 :

PHP Warning: fopen(./logs/sync.20130410.log) 
[<a href='function.fopen'>function.fopen</a>]: failed to open stream: 
Too many open files in ./functions.php on line 61 

나도 같은 핸들을 사용에 문제가있는 줄 알았는데, 그래서 그것을 변경 :

function log_entry($msg) { 
    global $log_file; 
    $msg = "[".date('Y-m-d H:i:s')."] ".$msg."\n"; 
    echo $msg; 
    $log_handle = fopen($log_file, 'a'); 
    fwrite($log_handle, $msg); 
    fclose($log_handle); 
} 

하지만 작동하지 않았습니다. 오류가 항상 같은 로그 라인에 표시됩니다. 내가 ulimit -n을 할 때 나는 1024 개를 얻지 만, 하나 이상의 파일을 결코 열지 않기 때문에 문제가되어서는 안된다. 아이디어?

+0

내 공유 호스팅 공급자와 파일 설명자 한도로 실행 – Zak

+0

하지만 한 번에 하나씩 두 기능을 모두 사용하지 않습니까? 첫 번째 것은 완전한 실행을 통해 하나만 사용하고 두 번째 것은 한 줄에 하나씩 사용하도록되어 있습니다 ... 아니면 다르게 작동합니까? – Mauro

+0

http://serverfault.com/questions/195334/apache-crashes-every-night-due-to-too-many-open-files – zod

답변

6

문제가 발견되었습니다. 나는 그 누구도 같은 이유로 구글에 답변하고 있지만이 답변은 그 질문에 함축되어 있지 않다는 것을 알고있다.

BigCommerce API 클라이언트를 사용 중이며 요청 당 핸들을 열고 내 스크립트가 중단되는 것으로 나타났습니다.

BigCommerce/API/Connection.php : 354-365 :

public function put($url, $body) 
{ 
    $this->addHeader('Content-Type', $this->getContentType()); 

    if (!is_string($body)) { 
     $body = json_encode($body); 
    } 

    $this->initializeRequest(); 
    $handle = tmpfile(); 
    fwrite($handle, $body); 
    fseek($handle, 0); 
    curl_setopt($this->curl, CURLOPT_INFILE, $handle); 
    curl_setopt($this->curl, CURLOPT_INFILESIZE, strlen($body)); 

    curl_setopt($this->curl, CURLOPT_URL, $url); 
    curl_setopt($this->curl, CURLOPT_PUT, true); 
    curl_exec($this->curl); 
    fclose($handle); // Added this line 

    return $this->handleResponse(); 
} 

(추가되었습니다 fclose($handle);) 라인 여기에 내가 그것을 해결하는 방법입니다.

관련 문제