2012-02-14 31 views
9

Tôi đang gặp khó khăn khi tạo thư viện cURL PHP nhận ra bí danh mà tôi đã tạo trong tệp /etc/hosts của mình.PHP cURL không thấy tệp/etc/hosts

Đây là những gì tôi có trong tập tin /etc/hosts tôi ngay bây giờ:

192.168.0.20 www.example.dev 

Ở phía bên kia (192.168.0.20) Apache được cấu hình để chạy các máy chủ ảo trên miền example.dev. Bí danh hoạt động nếu tôi thử nghiệm trên trình duyệt của mình nhưng với PHP cURL không hoạt động.

File hosts là trên cả hai máy (192.168.0.10 < = PHP cli, 192.168.0.20 < = Apache).

Vì mục đích hoàn chỉnh, đây là mã PHP tôi đang sử dụng.

 $this->url = 'http://www.example.dev/'; 
     $this->ch = curl_init(); 
     $header = array 
     (
      "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 
      "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3", 
      "Accept-Encoding: gzip,deflate,sdch", 
      "Accept-Language: it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4", 
      "Cache-Control: max-age=0", 
      "Connection: keep-alive", 
     ); 

     $sUserAgent = $this->tor ? UserAgents::getRandom() : UserAgents::CHROME16_LINUX; 

     curl_setopt($this->ch, CURLOPT_HTTPHEADER, $header); 
     curl_setopt($this->ch, CURLOPT_USERAGENT, $sUserAgent); 
     curl_setopt($this->ch, CURLOPT_URL, $this->url); 
     curl_setopt($this->ch, CURLOPT_HEADER, false); 
     curl_setopt($this->ch, CURLINFO_HEADER_OUT, true); 
     curl_setopt($this->ch, CURLOPT_FOLLOWLOCATION, true); 
     curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, (bool) $waitResponse); 
     curl_setopt($this->ch, CURLOPT_VERBOSE, (bool) $this->verbose); 
     curl_setopt($this->ch, CURLOPT_PORT, $this->port); 
     curl_setopt($this->ch, CURLOPT_AUTOREFERER, true); 
     curl_setopt($this->ch, CURLOPT_MAXREDIRS, 10); 
     curl_setopt($this->ch, CURLOPT_ENCODING, ''); 
     curl_setopt($this->ch, CURLOPT_CONNECTTIMEOUT, 30); 
     curl_setopt($this->ch, CURLOPT_TIMEOUT, 60); 
     curl_setopt($this->ch, CURLOPT_DNS_CACHE_TIMEOUT, 120); 
     curl_setopt($this->ch, CURLOPT_COOKIESESSION, true); 
     curl_setopt($this->ch, CURLOPT_COOKIEFILE, 'cookie'); 

     foreach ($this->files as $k => $file) { 
      $this->data['_file_' . $k] = '@' . $file; 
     } 

     curl_setopt($this->ch, CURLOPT_POST, true); 
     curl_setopt($this->ch, CURLOPT_POSTFIELDS, $this->data); 

     $this->result = curl_exec($this->ch); 

Lưu ý: Vấn đề này có vẻ như this one nhưng PHP liên quan.

+0

Bạn đã khởi động lại máy chủ chưa? Chỉ để chắc chắn? –

+2

là tệp máy chủ trên máy phù hợp? Bạn có chạy PHP trên máy này không? –

+0

Bạn có thể đăng mã chính xác không? Không có vấn đề gì. – mlinuxgada

Trả lời

6

Giải Quyết sử dụng url này "http://192.168.0.20/" thay vì "http://www.example.dev"

Cũng là "chủ nhà" tiêu đề là cần thiết ...

$header = array 
(
    "Host: www.example.dev", // IMPORTANT 
    "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 
    "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3", 
    "Accept-Encoding: gzip,deflate,sdch", 
    "Accept-Language: it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4", 
    "Cache-Control: max-age=0", 
    "Connection: keep-alive", 
); 

curl_setopt($this->ch, CURLOPT_URL, 'http://192.168.0.20/'); 
curl_setopt($this->ch, CURLOPT_HTTPHEADER, $header); 
2

Bạn có thể chạy PHP trên máy chủ apache đó và ở đó bạn không có mục nhập tệp máy chủ.

+0

Tệp máy chủ có trên tất cả các máy (192.168.0.10 <= php cli, 192.168.0.20 <= apache) –

+0

@karoly cảm ơn! điều này soi sáng cho tôi! Tôi đã sử dụng docker cho các thử nghiệm và vùng chứa không có mục nhập trên tệp máy chủ! – mloureiro