2007年11月30日 星期五

[PHP] fsockopen 之簡單的實作範例

<?
  if( empty($_GET['u']) )
    return;
  class 叮叮噹噹 {
    public static function getImageContent( $src_url ){
      $host = "叮叮噹噹";
      $fp = fsockopen( "叮叮噹噹" , 80, $errno, $errstr, 30);
      if( !$fp ){
        $mseg = $errst." (".$errno.")";
        return ;
      }else{
        $host   = "叮叮噹噹";
        $target   = strstr( substr( $src_url , strlen("http://") ) , "/" );
        $filename = substr( $target , strrpos( $target , "/") );
        $filename = substr( $filename , 1 );
        $referer  = "http://叮叮噹噹/";

        $out  = "GET ".$target." HTTP/1.1\r\n";
        $out .= "Host: ".$host." \r\n";
        $out .= "Referer: ".$referer." \r\n";
        $out .= "Connection: Close\r\n\r\n";
        fwrite($fp, $out);
        $content = "";
        $inheader = 1;
        while (!feof($fp)) {
          $line = fgets($fp,1024);
          if ($inheader && ( $line == "\n" || $line == "\r\n"  ) ) {
            $inheader = 0 ;
          }else{
            if ($inheader == 0) {
              $content.=$line;
            }
          }
        }
        fclose($fp);
        if( empty($content) )
          return;
        header("Content-Type: application/octet-stream");
        header('Content-Disposition: inline; filename="'.$filename.'"');
        echo $content;
      }
    }
  }
  叮叮噹噹::getImageContent( $_GET['u'] );
?>

2007年11月6日 星期二

[VIM] 打出 ^M

Ctrl + v
接著把 ctrl 不放
但放開 v 改換按 m 就會產生 ^M 啦

同理於 ^@ = Ctrl + v -> Ctrl 繼續按著 但放開 v -> Ctrl + Shift + @

2007年11月5日 星期一

[VIM] %s/@\n/@\n/g 之產生 ^@ 問題

檔案內容:

@
@U:495410000
@ID:
@
@U:495410000
@ID:
@
@U:495410000
@ID:
...

最基本的格式是

@
@U:
@Name:

若想增加欄位成為

@
@U:
@Name:
@Info:

此時透過 vim 下的參數是

    :%s/\n@\n/\n@Info:\n@\n/g

以此減少檔案內需要變動的資料數
但轉換後卻會出現擾人的'^@'符號

與 Randy 閒聊後發現 :%s/前面/後面/g 的"後面"中的'\n'會有問題
改成 '\r' 卻可以達到一樣想要的效果!

    :%s/\n@\n/\r@Info:\r@\r/g

在此紀錄一下

[Javascript] Key Event 之蔓延的處理方式

有時偵測到 Key 時, 不想讓 Key 繼續蔓延下去使用, 即可考慮這個方式處理

function preventDefault(ev) {
    if (ev.preventDefault){
        ev.preventDefault();
    }else if (ev.cancelBubble){
        ev.cancelBubble = true;
    }else{
        ev.returnValue = false;
    }
}

document.onkeydown=keyAtPost;
function keyAtPost(e){
    var evt = window.event || e ;
    var evt_key = evt.which != null ? evt.which : evt.keyCode ;
    var GetDefine = 0 ;
    if ( evt_key > 47 && evt_key < 58 ){    // 以數字鍵為例
        switch( state_control ){
            ...
            case STATE_INIT:
                state_control = STATE_GO;
                ...
                GetDefine = 1;
                break;
            ...
        }
    }
    if( GetDefine ) {
        preventDefault(evt);
    }

}

當 match 到一個自訂的狀態時,不想讓此鑑盤事件繼續蔓延到其他地方,好比如現在正在 textarea 時  把數字鍵當成特殊鍵使用,並且不想在 textarea 顯示數字時  可採用這種方式處理

--
    在此感謝 Vexed 學長的教導 :D