2012-06-22 5 views
5

Tôi đang cố gắng ghi nhật ký thông tin từ lần truy cập cURL vào tệp nhật ký nhưng không thể làm như vậy, Tôi chạy các cửa sổ bằng wamp và có toàn quyền kiểm soát tất cả người dùng trong máy và tệp nhật ký và tệp php gọi cURL đều nằm trong cùng một thư mục cho thử nghiệm này. Tôi đã sử dụng mã bên dưới:không thể ghi vào tệp bằng PHP cURL với curlopt_stderr và curlopt_file

$session = curl_init(); 
$logfh = fopen("my_log.log", 'a+'); 
if ($logfh) { 
    print "Opened the log file without errors"; 
} 
curl_setopt($session, CURLOPT_HEADER, false); 
curl_setopt($session, CURLOPT_RETURNTRANSFER, true); 
// Optional settings for debugging 
curl_setopt($session, CURLOPT_VERBOSE, true); 
curl_setopt($session, CURLOPT_FILE, $logfh); // logs curl messages 
// curl_setopt($session, CURLOPT_STDERR, $logfh); // logs curl messages 
curl_exec($session); 
curl_close($session); 

Các log file mở ra mà không có lỗi và cURL tôi trả về thành công nhưng không được đăng nhập vào file.I've sử dụng CURLOPT_FILECURLOPT_STDERR cách khác nhưng không giúp nguyên nhân và không chắc chắn nếu tôi có một cái gì đó sai ở đây. Bất kỳ đề xuất về gỡ lỗi này sẽ được đánh giá cao.

+1

Tôi không thấy lệnh gọi của bạn tới ['curl_exec()'] (http://www.php.net/manual/en/function.curl-exec.php). Có cái gì đó thiếu trong ví dụ của bạn? – Lee

+0

bạn quên '$ session = curl_init(); ' – HamZa

+0

@Lee cảm thấy những điều này rõ ràng vì tôi đã chỉ định curl trả về thành công (200) nhưng đã chỉnh sửa câu hỏi – optimusprime619

Trả lời

5

Lưu ý: Nếu URL bạn đang cố gắng cuộn hướng chuyển hướng đến một URL khác, sau đó ghi đầu ra vào tệp S W KHÔNG thành công.

Hãy đảm bảo bạn thêm dòng sau also-

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); 

Cũng như một mặt lưu ý, hãy chắc chắn bạn đóng tập tin với fclose() để đảm bảo các tập tin hoàn tất.

+0

cảm ơn cho phản ứng, tôi đã đặt 'CURLOPT_FOLLOWLOCATION' và' CURLOPT_MAXREDIRS', tuy nhiên đã không thực hiện 'fclose()' ... sẽ cung cấp cho nó một thử – optimusprime619

+0

nó đã làm việc! cảm ơn bạn rất nhiều .. – optimusprime619

4

Nếu bạn đã thêm fclose(), và thực hiện khác nhau "chút sửa chữa" được liệt kê trong các ý kiến ​​trên, nhưng nó vẫn không làm việc ... sau đó tôi nghi ngờ rằng bạn đang nhìn thấy tùy chọn mâu thuẫn:

  • CURLOPT_RETURNTRANSFER yêu cầu curl trả lại phản hồi dưới dạng giá trị trả lại của cuộc gọi curl_exec().

  • CURLOPT_FILECURLOPT_STDERR yêu cầu curl ghi phản hồi (hoặc đầu ra lỗi) vào một xử lý tệp được chỉ định.

Dường như chúng có thể loại trừ lẫn nhau. Tôi sẽ đề nghị bạn nên sử dụng một hay cách khác, nhưng không phải cả hai:

Hoặc sử dụng CURLOPT_RETURNTRANSFER, như thế này:

$session = curl_init(); 
$logfh = fopen("my_log.log", 'a+'); 
if ($logfh !== false) { 
    print "Opened the log file without errors"; 
} 
curl_setopt($session, CURLOPT_HEADER, false); 
curl_setopt($session, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($session, CURLOPT_VERBOSE, true); 
$result = curl_exec($session); 
curl_close($session); 
fwrite($logfh, $result); 
fclose($logfh); 

hoặc sử dụng CURLOPT_FILE, như thế này:

$session = curl_init(); 
$logfh = fopen("my_log.log", 'a+'); 
if ($logfh !== false) { 
    print "Opened the log file without errors"; 
} 
curl_setopt($session, CURLOPT_HEADER, false); 
curl_setopt($session, CURLOPT_FILE, $logfh); 
curl_setopt($session, CURLOPT_VERBOSE, true); 
curl_exec($session); 
curl_close($session); 
fclose($logfh); 
+1

Cảm ơn bạn rất nhiều, đó là 'fclose()' :) – optimusprime619

0

Có cũng có thể gặp sự cố khi sử dụng CURLINFO_HEADER_OUT = true. Tôi đoán có cái gì đó trong CURLINFO_VERBOSE sử dụng tùy chọn này và chỉ đàn áp thông tin VERBOSE ...

curl_setopt($ch, CURLINFO_HEADER_OUT, false); 
curl_setopt($ch, CURLOPT_VERBOSE, true); 
curl_setopt($ch, CURLOPT_STDERR, fopen('log.log', 'a+')); 

Chỉ cần đề cập đến, bạn có thể sử dụng:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_VERBOSE, true); 
curl_setopt($ch, CURLOPT_STDERR, fopen('log.log', 'a+')); 

Nếu bạn muốn đăng nhập đầu ra để nộp và vẫn có thể trả lại curl_exec.