10/10/2018, 00:13

Remote Server - Post data - Lỗi kỳ quá !

Bác nào chỉ giáo cho em chút, chưa biết sai ở đâu

PHP Code:
  $result=';
  
$host='www.google.com';
  
$path='/service/gtalk/accounts/login.php';
  
$postdata="user=".$name."&password=".$pwd;
  
$contentlength strlen($postdata);

    
$fp = @fsockopen($host80$errno$errstr60);
      if(
$fp){
        
$header "POST ".$path." HTTP/1.0 ";
        
$header.= "Host: ".$host." ";
        
$header.= "Connection: Keep-Alive ";
        
$header.= "Content-type: application/x-www-form-urlencoded  ";
        
$header.= "Content-length: ".$contentlength." ";
        
$header.= $postdata" ";

          
fwrite($fp$header); 

            while(!
feof($fp)) {
                
$result.=fgets($fp,108);
            }
          
fclose($fp); 
      } 
Lỗi nhận được :

Fatal error: Maximum execution time of 30 seconds exceeded in D:AppServwwwTest emotePost.php on line 35
Dòng 35 là dòng này :

PHP Code:
$result.=fgets($fp,108); 
jiSh@n viết 02:25 ngày 10/10/2018
Có lỗi syntax kìa
sacroyant viết 02:19 ngày 10/10/2018
Lỗi đó là trong quá trình paste sang đây thôi chứ loại này dễ nhận ra mà

À, không phải mà do diễn đàn nó tự fix mất cái nháy đơn. Để trong nháy kép như vậy thì được rồi.
tiendx2002 viết 02:22 ngày 10/10/2018
fsock của bạn để timeout lớn quá. Mình có mấy lần viết thì chỉ để nó khoảng 10s là nhiều, vì đặc thù lập trình form tự động là cần tốc độ.
Thứ hai để chắc chắn format data là đúng thì nên dùng phần mềm nào đó detect dòng dữ liệu HTTP.
Kiểu như HTTP Analyzer.
Thân mến.
sacroyant viết 02:29 ngày 10/10/2018
Cảm ơn bạn nhắc nhở. Tớ đã rút timeout xuống còn 30s

Cái host của tớ không cho dùng các hàm get content dạng fsockopen, fgets... có sẵn, nhưng lại hỗ trợ thư viện curl_init. Tớ dùng cái này thấy còn nhanh hơn
tiendx2002 viết 02:20 ngày 10/10/2018
Được gửi bởi sacroyant
Cái host của tớ không cho dùng các hàm get content dạng fsockopen, fgets... có sẵn, nhưng lại hỗ trợ thư viện curl_init. Tớ dùng cái này thấy còn nhanh hơn
Híc, tưởng không có CURL mới mày mò fsock chứ, có CURL còn nói chi nữa.
CURL là ưu tiên rồi. Tuy nhiên nếu có thể thì code tương thích, nếu có CURL thì chạy CURL (if is_function(...), nếu không nữa thì chạy fsock, nếu không nữa degrade về dạng:
Please enable at least CURL or OPEN SOCKET to continue .
Thân mến.
sacroyant viết 02:13 ngày 10/10/2018
Tớ đang xây dựng 1 Class đọc RSS, có phương thức load như dưới đây :

PHP Code:
    function load(){
      
$xml "";
        if(
function_exists('curl_init')){
          
$ch curl_init();
          
curl_setopt($chCURLOPT_URL$this->URL);
          
curl_setopt($chCURLOPT_HEADER0);
          
curl_setopt($chCURLOPT_RETURNTRANSFER1);
          
curl_setopt($chCURLOPT_USERAGENT'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0');
            
$xml curl_exec($ch);
          
curl_close($ch);
        }
        else if (
ini_get('allow_url_fopen') == '1'){
          @
$data=file_get_contents($this->URL);
            if(
$data){$xml =$data;}
        }
      return 
$xml;   
    } 
Bạn cho tớ hỏi làm sao để xác định bảng mã được sử dụng trong cái nguồn dữ liệu mà mình load về không ? Vì nhiều trang không dùng bảng mã Unicode cho RSS của nó, nên khi load về thì các ký tự non-unicode không hiển thị đúng
tiendx2002 viết 02:24 ngày 10/10/2018
Được gửi bởi sacroyant
Tớ đang xây dựng 1 [
Bạn cho tớ hỏi làm sao để xác định bảng mã được sử dụng trong cái nguồn dữ liệu mà mình load về không ? Vì nhiều trang không dùng bảng mã Unicode cho RSS của nó, nên khi load về thì các ký tự non-unicode không hiển thị đúng
Kiểu này phải không bạn:
http://vietnamnet.vn/rss/vnn_tinmoinhat.rss
Dịch ngược cái này oải quá, có nhẽ cứ bê luôn vào DB cũng được vậy .
Còn bình thường thì nó sẽ có charset, hoặc nếu không thì là ISO-8859-1.
Thân mến.
sacroyant viết 02:21 ngày 10/10/2018
Như kiểu cái này là 1 ví dụ :

http://hlinhlan.uni.cc/act/snapi.php...=25&output=xml

Yahoo! Sports dùng bảng mã Western ISO-8859-1, khi lấy về hiển thị thì bị lỗi ở một số ký tự tiếng Pháp như : ç, é, ï, ü...

Bảng mã trên trang của tớ là UTF-8.
tiendx2002 viết 02:24 ngày 10/10/2018
Được gửi bởi sacroyant
Như kiểu cái này là 1 ví dụ :

http://hlinhlan.uni.cc/act/snapi.php...=25&output=xml

Yahoo! Sports dùng bảng mã Western ISO-8859-1, khi lấy về hiển thị thì bị lỗi ở một số ký tự tiếng Pháp như : ç, é, ï, ü...

Bảng mã trên trang của tớ là UTF-8.

Lạ nhỉ.
Code:
<?php
	$URL = "http://fr.sports.yahoo.com/eurosport/tickerdb/sport/22.xml";
	$xml = "";
        if(function_exists('curl_init')){
          $ch = curl_init();
          curl_setopt($ch, CURLOPT_URL, $URL);
          curl_setopt($ch, CURLOPT_HEADER, 0);
          curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
          curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0');
            $xml = curl_exec($ch);
          curl_close($ch);
        }
        else if (ini_get('allow_url_fopen') == '1'){
          @$data=file_get_contents($URL);
            if($data){$xml =$data;}
        }
      echo $xml;    
?>
Của mình hiện rất tốt mà.

Thân mến.
Bài liên quan
0