顯示具有 PHP 小程式 標籤的文章。 顯示所有文章
顯示具有 PHP 小程式 標籤的文章。 顯示所有文章

2013年12月28日 星期六

php fork,平行 ping (MutiPingScan, multiple ping scanner)

前些天,因為一些需要

所以用php寫了一個 multiple ping scanner

可以平行同時 ping n 個 ip

是利用 php fork,所以要先有安裝 pcntl_fork

廢話不多說,程式碼已經 git上 github了

https://github.com/poi5305/MutiPingScan.git

=============================================

使用方法

1. 先下載,解壓縮,or "git clone https://github.com/poi5305/MutiPingScan.git"

2.執行

if you want to ping 8.8.8.1 ~ 8.8.8.10
usage: php ./MutiPingScan.php 8.8.8 1 10
ps 基本上要是 linux 相關系統,mac 也可以
ps 可以搭配 MutiPortScan 同時使用^^

php fork,平行掃port (MutiPortScan, multiple port scanner)

前些天,因為一些需要

所以用php寫了一個 multiple port scanner (平行連接埠掃瞄器)

可以平行同時掃 n 個 port (n=100)

是利用 php fork,所以要先有安裝 pcntl_fork

廢話不多說,程式碼已經 git上 github了

https://github.com/poi5305/MutiPortScan

=============================================

使用方法

1. 先下載,解壓縮,or "git clone https://github.com/poi5305/MutiPortScan.git"

2.執行

if you want to scan ports 8.8.8.8, 1 to 100
usage: php ./MutiPortScan.php 8.8.8.8 1 100

ps 基本上要是 linux 相關系統,mac 也可以
ps 可以搭配 MutiPingScan 同時使用^^

2011年8月1日 星期一

PHP curl 查詢機票座位(機位)

前言...

因為在暑假的某一天,
"突然"想去韓國自由行玩個一個禮拜,
不過因為決定的有點突然,
只剩不到一個月左右,
機票便宜的都訂光了,
只剩下貴兩三倍的機票,
於是我們就去找旅行社幫忙,
結果旅行社只能幫我們查詢,
某天去的班機和某天回來的班機,而且還要某家航空公司
而不能"全部"查詢,只能要我們慢慢手動一個一個點...
...這...並非人力所及
幾十個航班,加上20天內都有空,只要玩個5~6天,在加上每天都會有機位新釋出
意思是說每天都要點個(保守估計)20航班 x 15天的去回=300up次 (一次可以查去回)
每次查詢還要十幾秒鐘的時間...

相信很多人都有此困擾 = =

因此最後決定動用"程式"的力量︿︿

(最一開始我是想說應該有人已經有寫出來了,
不過簡單google一下,也沒有發現,最後只好自己動手了)

由程式來解決問題...

最後的機票是找到比最便宜貴約1.3倍的價錢(手動的話...大概這次出國就要放棄了)
(不過結果證實,下次要出國還是要趁早決定)


==============================

==============================

進入正題

是使用php+curl的方法,在這裡只有把curl的方法列出來

至於文字拆解就不詳述(而curl的目標,就是某旅行公司...)

(實際上測試了3家旅行業者,找一個最簡單的列出來)

===============================

//第一步,取得所有適合的班機

$ch = curl_init();

$url = "http://www.eztravel.com.tw/ezec/freefit/ec_fit_main_query.jsp?city_from=TPE&city_to=SEL&ticket_type=R&service_type=4&ticket_class_section=2&international_cd=&searchBegDate=20110811&priceRange=0,12000&wt_search=fit2";
//這個url是先去他的網站查詢適合班機的結果,也可以自己改數值
//例如 priceRange=0,12000 就是0元到12000元


curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
//模擬由你的瀏覽器進入,在這個旅行網站好像不需要(有點忘了),不過另某家需要
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_REFERER, "http://www.eztravel.com.tw/");
//這行最重要,是這旅遊網站認證的地方,沒有的話會無法取得資料
$result = curl_exec($ch);



//第二步,查詢機位

//這邊是設定給網站查詢的設定值(最好都不要少)
//至於取得方法,可以看最後表單的輸出結果
//也可以用google chrome右鍵檢查元素也可以得到
//而value,基本上是從你剛剛取得所有適合的航班的頁面可以取得


$tmp = 'prod_no:'.$prod_no.'
beg_date:'.$beg_date.'
end_date:'.$end_date.'
tkt_type:'.$tkt_type.'
ticket_type:'.$ticket_type.'
arg:1
arg:'.$prod_no.'
arg:20040815
arg:1
arg:TPE
arg:TPE
arg:2
hOpenChk:
bookYn:'.$bookYn.'
goPeople:'.$buyNum.'
Choice1:'.$buyNum.'
kind:'.$prod_no.','.$beg_date.','.$end_date.',1
Choice1:0
kind:'.$prod_no.','.$beg_date.','.$end_date.',3
Choice:'.$buyNum.'
Choice:0
h_checkInDateT:
checkInDateT:'.$checkInDate.'
f_checkin_date2:
checkOutDateT:'.$checkOutDate;
//echo $tmp;
$tmp = str_replace(":","=",$tmp);
$tmp = str_replace('
',"&",$tmp);

$post_login = $tmp;


$ch = curl_init();
$url = "http://www.eztravel.com.tw/ezec/freefit/ec_fit_flypath_searching.jsp";

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
//如果跳頁,跟的跳,這網站好像不會用到
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_login);//給予參數設定值
curl_setopt($ch, CURLOPT_REFERER, "http://www.eztravel.com.tw/ezec/freefit/ec_fit_date_query.jsp");
//這行這網站會驗證
$result = curl_exec($ch);
return $result;



//result 就是結果摟!!就是這樣

===============程式碼 END==============

最後的執行結果是存在mysql裡面,方便查詢

最後的結果(候補沒顯示)

2010年11月30日 星期二

FQorder 物品得標整理+匯款單系統

http://www.fqstory.jjvk.com/fqorder/

FQorder 匯款單系統

========前言========

之前看到很火紅的匯款單填寫系統

就已經有躍躍欲試的衝動

之後又發現,日貨賣家好像不太使用"目前最大的匯款單系統"

而只是用一些"小小匯款單系統",就探討了一些原因

等等原因....

就寫了一個針對"日貨賣家"所寫的"匯款單系統"

===================

目前還只有在初步測試

版面也還在設計中...

===================


當然,因為我也不是日貨賣家

也許此系統不一定符合日或賣家的需求

所以在這邊發表,想要徵求一些日貨賣家的意見或是測試


2010年9月13日 星期一

PHP Html 轉成陣列(array)

=========標題========
PHP Html 轉成陣列(array)





PHP html array
PHP html to array
php html 轉 array
========HTML========
<html id ="headmenu"><head><meta id="d" /><meta /><head/></html><div id ="headmenu">3<p>sd</p><p>sd</p>bb</div>

========結果=========
array(2) {
[0]=>
array(4) {
["tag"]=>
string(6) ""
["id"]=>
string(8) "headmenu"
["text"]=>
string(0) ""
["next"]=>
array(1) {
[0]=>
array(3) {
["tag"]=>
string(6) ""
["text"]=>
string(0) ""
["next"]=>
array(2) {
[0]=>
array(2) {
["tag"]=>
string(6) ""
["id"]=>
string(1) "d"
}
[1]=>
array(1) {
["tag"]=>
string(6) ""
}
}
}
}
}
[1]=>
array(4) {
["tag"]=>
string(5) "


"
["id"]=>
string(8) "headmenu"
["text"]=>
string(3) "3bb"
["next"]=>
array(2) {
[0]=>
array(3) {
["tag"]=>
string(3) ""
["text"]=>
string(2) "sd"
["next"]=>
array(0) {
}
}
[1]=>
array(3) {
["tag"]=>
string(3) ""
["text"]=>
string(2) "sd"
["next"]=>
array(0) {
}
}
}
}
}
========程式=========
function c2a($c){
  $t="";$re = array();$n=count($re);
  $nset=0;
  $ca=explode("<",$c);
  for($i=0;$i
   if($i>0){
    $ca[$i] = explode(">",$ca[$i]);
    
    $ck = $this->c2i($ca[$i][0]);
    if(!strstr($ca[$i][0],"/")){
     $nset++;
     if($this->taginfo($ck["tag"])){
      $nset--;
      if($nset==0){
       $n=count($re);
       $re[$n]=$this->c2i($ca[$i][0]);
       $n++;
      }else{
       $t .= "<".$ca[$i][0].">";
      }
     }else{
      if($nset==1){
       //echo "a("."<".$ca[$i][0].">".")";
       $n=count($re);
       $re[$n]=$this->c2i($ca[$i][0]);
       $re[$n]["text"] = $ca[$i][1];       
      }else{
       //echo "b("."<".$ca[$i][0].">".")";
       $t .= "<".$ca[$i][0].">".$ca[$i][1];       
      }
     }
    }else{
     $nset--;
     if($this->taginfo($ck["tag"])){
      $nset++;
      if($nset==0){
       $n=count($re);
       $re[$n]=$this->c2i($ca[$i][0]);
       $n++;
      }else{
       $t .= "<".$ca[$i][0].">";
      }
     }else{
      if($nset==0){
       //echo "c("."<".$ca[$i][0].">".")";     
       $re[$n]["next"] = $this->c2a($t);
       $t="";$n=count($re);     
      }else{
       //echo "d("."<".$ca[$i][0].">".")";
       if(!isset($re[$n]["text"]))$re[$n]["text"]= $ca[$i][1]; else $re[$n]["text"].= $ca[$i][1];
       $t .= "<".$ca[$i][0].">".$ca[$i][1];       
      }
     }
    } 
   }
  }
  return $re;  
 }

====================================
目前沒有常用到此FUNCTION
但知道一定有一些問題
請大家如果有發現問題,請告訴我,我會修正

2010年6月13日 星期日

IGOOGLE 小工具開發之新手上路 之 igoogle SmartAccount聰明線上記帳小工具 by FQstory

IGOOGLE 小工具開發之新手上路 之 igoogle SmartAccount聰明線上記帳小工具 by FQstory

最近寫了一個記帳程式想要放到 IGOOGLE 上

所以就研究一下 GOOGLE的小工具開發方法

其實步驟很簡單,且GOOGLE還免費提供一套 editor : Google Gadgets Editor

首先

新增Google Gadgets Editor 小工具



然後大家應該都會了吧!!


不過這個小工具要用XML的語法寫入(可以放HTML)

然後再publish以前

要先確認一下需求格式

這邊以smartaccount為例子:

?xml version="1.0" encoding="UTF-8"?
Module
ModulePrefs title="SmartAccount 聰明記帳小工具 @ by FQstory" height="300" width="300"
             description="簡單的記帳小工具,他可以自動計入您所輸入過的項目,並且自動依次排序喔!!還可以設定預算等等功能喔"
             author="Mien-De Jhuo "
             author_email="poi5305@gmail.com"
    author_location="http://fq-story.blogspot.com/"
    thumbnail="http://poi5305.my3gb.com/account/ico.jpg"
    screenshot="http://poi5305.my3gb.com/account/ico.jpg"
             
/ModulePrefs
Content type="url" href="http://poi5305.my3gb.com/account/index.html" /
/Module

PS . < & > 拿掉了

ModulePrefs 屬性 裡面基本上最好都要填寫
再發布的時候google也會提醒你哪些是必要的

都弄好之後就可以選擇倒數第二的選項 "publish"

之後就照著google的指示進行即可


順便介紹一下 IGOOGLE SmartAccount聰明記帳小工具  新增





他其實說明白點就是簡單的記帳工具

==========功能一:快速選擇項目============



至於特色就是會自動記錄您之前所輸入過的項目

並且依造次數排序 (顯示前六名)

可以省略以往還要邊輯 項目的動作

因為是以次數排列
所以顯示出來的快速選擇項目一定是常用的項目

=========功能二:快速搜尋項目============



如果前六名沒有您想要輸入的項目

就可以輸入前一個字在欄位中

系統也會自動搜尋您曾經輸入過的項目

或是最熱門的項目

==========功能三:訂定預算============



之後還有提供一個小的功能

就是可以對項目訂定預算

如果支出超過預算,就會以紅色的提醒您該注意了

==========特色:明細==============

在列出明細時,可以選擇 年或月或日

年會顯示 一年的統計(平均花費)

月會顯示 一個月的統計(平均花費)

日則顯示 當天所有的收支狀況

==================================

本程式使用AJAX+PHP+JS 技術

2010年3月6日 星期六

PHP Function 文字與陣列轉換,資料庫好用喔(可多層)

這個程式主要就是可以把陣列 和文字 互相轉換
在資料庫要新增欄位算是比較麻煩的事情,而且如果欄位和值的數量不固定
資料庫就很難作用
因此寫了這個程式(初步構想),只要在資料庫欄位中,新增一個TEXT 欄位即可
大家可以試試看,本人是覺得還蠻方便的
=========================================
後來發現 其實就是JSON 的觀念
=========================================

<?php

$text = "e:{ee:{eee:55},e2:555},a:1,b:{ba:1},c:2,d:{dd:4,da:5}";

$text2 ='aa,bb,cc,dd';

$a = text2array($text);

$a = array2text($a);

var_dump($a);//string(53) "e:{ee:{eee:55},e2:555},a:1,b:{ba:1},c:2,d:{dd:4,da:5}"

function text2array($text){

$return = array();

while($text){

$tay = explode(":",$text,2);

$l=0;$i= (-1);

while($i<strlen($tay[1])){

$i++;

if($tay[1][$i]=="{"){

$l++;

}elseif($tay[1][$i]=="}"){

$l--;

}

//if()

if($l==0){

break;

}

}

if($i==0){

$tb = explode(",",$tay[1],2);

$return[$tay[0]] = $tb[0];

if(isset($tb[1]))

$text = $tb[1];

else

$text = false;

}else{

$return[$tay[0]] = text2array(substr($tay[1],1,($i-1)));

$text = substr($tay[1],($i+2));

}

}

return $return;

}

function array2text($array){

$return = '';

if(is_array($array)){

foreach($array as $field=>$content){

if(is_array($content)){

$return = $return.$field.":{".array2text($content)."}";

}else{

$return = $return.$field.":".$content;

}

$return .= ",";

}

$return = substr($return,0,-1);

}else{

$return = $array;

}

return $return;

}

?>

2009年12月10日 星期四

簡單後端控制之檔案上傳

簡單後台控制之檔案上傳
(WINDOWS)
================================
原由:
主要是從老師那邊拿到了一個空間
也就是拿到一台電腦的掌控權
不過卻很難控制(學校裡面防護多多)
都只能以遠端控制的方法
要傳檔案只有慢慢慢
所以就乾脆寫了一個簡單的PHP上傳的程式
顆顆顆~~
================================
功能
可以瀏覽整台電腦
可以在指定位置上傳檔案(就是當下瀏覽的位置)
可以覆蓋已經存在的檔案
應該可以中文(要以BIG5,看電腦是甚麼編碼吧)
================================
警告
此程式很危險,最好不要亂放
要記得加上防護,EX帳號密碼認證等等

================================
PHP程式碼
================================

<?php

$localhost = 'http://localhost/';//這邊要改成實際網址初目錄

//$path = 'http://xxx.xxx.xxx.xxx/';

$path = $wwwpath = 'c:\\wamp\\www\\';//對電腦來說放網站的實際位置

//$path = 'c:\\apache\\htdocs\\';

//路徑變好看用

if(isset($_GET['path'])){

$path = $_GET['path'];

$temp = $path = explode('\\',$path);

foreach($temp as $a => $b){

if($b == '..'){

unset($path[($a+1)]);

unset($path[($a)]);

$path[($a-1)] = '';

}

}

$path = implode('\\',$path);

}

//上傳用

if(isset($_POST['submit'])){

if($_FILES['file']['error'] > 0){

switch($_FILES['file']['error']){

case 1 : die("檔案大小超出 php.ini:upload_max_filesize 限制");

case 2 : die("檔案大小超出 MAX_FILE_SIZE 限制");

case 3 : die("檔案僅被部分上傳");

case 4 : die("檔案未被上傳");

}

}else{

if(is_uploaded_file($_FILES['file']['tmp_name'])){

$DestDIR = $path;

if(!is_dir($DestDIR) || !is_writeable($DestDIR))

die("目錄不存在或無法寫入");

//$File_Extension = explode(".", $_FILES['file']['name']);

//$File_Extension = $File_Extension[count($File_Extension)-1];

//$ServerFilename =date("YmdHis") . "." . $File_Extension;

$ServerFilename = $_FILES['file']['name'];

copy($_FILES['file']['tmp_name'] , $DestDIR . "/" . $ServerFilename );

echo $ServerFilename."<br>";

echo $DestDIR."<br>";

echo 'SUCCESS'."<br>" ;

}

}

}

//瀏覽用

$opdir = dir($path);

while($entry = $opdir->read()){

if(is_dir($path.$entry) && $entry != '.'){

echo '<a href = "dealfile.php?path='.$path.$entry.'\\" >'.$entry.'</a> <br />';

}elseif(!is_dir($path.$entry)){

if(strstr($path.$entry,$wwwpath)){

$url = str_replace($wwwpath,$localhost,$path.$entry);

echo '<a href = "'.$url.'" >'.$entry.'</a> <br />';

}else{

echo $entry.'<br />';

}

}

}

$opdir->close();

?>

</p>

<form action="dealfile.php?<?php echo 'path='.$path.$entry ; ?>" method="post" enctype="multipart/form-data" name="form1"

id="form1">

<input type="file" name="file" />

<input name="MAX_FILE_SIZE" type="hidden" id="MAX_FILE_SIZE" value="2000000" />

<input type="submit" name="submit" value="upload" />

</form>

2009年9月16日 星期三

GOGOBOX 搜尋引擎(PHP程式碼公開)

=======GOGOBOX 搜尋引擎(註記)===========

從寫好到現在已經過了一段時間了
大概搜到有五十多萬筆就停止了
原因主要是 :
  • 資料庫目前還是在自己的小筆電上面,要公開搜尋要移到"大主機"上
  • 本人沒有付費空間或是"大主機",只有免費空間
  • 免費空間放三十萬筆就爆了(修一修頂多放五十萬筆),但GOGOBOX有上百萬筆
  • 已經有人寫出來了,而且也夠好了
大概在前個禮拜停止之後,至今已經快要淡忘了= ="
所以決定在忘記之前,快點先寫出來 (BLOG+福球亂彈)

=======GOGOBOX 搜尋引擎(原理)===========

其實只是使用最簡單也最笨的搜尋方法 "蜘蛛爬行法" (不太清楚是不是這樣叫)

爬行的只有會員ID,然後每個ID裡面都有許多檔案

這些檔案就用內建的GOGOBOX搜尋器,去搜尋

本人是一次搜尋最多五百筆(當然,你要一次用更多都沒關係),如果超過五百筆就跳頁

(使用瀏覽器看最多五十筆,他是記錄在COOKIE,改成五百)

(程式碼裡面全部都可以很清楚的看到方法,歡迎大家討論)


=======GOGOBOX 搜尋引擎(PHP程式碼)===========
//(因為是邊測試邊寫,所以寫的超亂的,未整理過,請包含)
//(邊碼為UTF8)
//(PS此篇還需要先用CURL登入,並將SESSION記錄起來才可使用GOGOBOX內建搜尋)

//這邊是開始使用"蜘蛛爬行法"
//30000000 前面開頭的"3"也等於網址的開頭 http://box3.gogobox.com.tw
//要修改的話要全部修改(約有兩三個)
//由於PHP有時間限制,所以要先改過,本人約改成兩個小時
//然後一次五千筆(可以開好多個網頁一次進行)
for($a=20001;$a<=25000;$a++){

$no = $a + 30000000; //GOGOBOX 會員ID 也是BOX ID

gogo_load($no);//呼叫主程式

}


//GOGOBOX 搜尋引擎 主程式
function gogo_load($no){

$post['box_no']=$no;//GOGOBOX 會員ID 也是BOX ID

$post['nPageNo']='1';//搜尋第幾頁

$row_page=500;//一次筆數(使用GOGOBOX內建搜尋)

$cookie_file_path = "d:\cookie.txt";//紀錄SESSION的地方,GOGOBOX內建搜尋必須登入

$ch = curl_init();

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);

curl_setopt($ch, CURLOPT_COOKIEFILE,$cookie_file_path);

//get info


//這行為登入的網址,要先登入一次GOGOBOX然後把記錄的SESSION記錄到上面的//d:\cookie.txt
//不過因為只用一次,之後都可以使用,所以登入的程式碼刪了 =="
//其實主要是因為是邊研究邊寫,所以之後覺得沒用,就...
//$login ='http://client.gogobox.com.tw:8000/caccessX';

$url = 'http://box3.gogobox.com.tw:8037/app/list_file.cgi?box_no='.$post['box_no'];

curl_setopt($ch, CURLOPT_URL,$url);

$num = curl_exec($ch);

$num = strip_tags($num,'');

$num = strstr($num,'全部資料夾');

$num = strstr($num,'(');

$num = (int)substr($num,1,6);

//以上是判斷是否有資料,如果有才執行以下"使用GOGOBOX內建搜尋 搜尋檔案"
//不過之後覺得這邊可以改一下,速度可以更快
if($num !=0){

$page = ceil($num/$row_page);

//===============================================

$url = 'http://box3.gogobox.com.tw:8037/app/list_file.cgi';



//$post['nPageNo']='1';

$once_num = 0;

for($i=1;$i<=$page;$i++){



load_gogobox($post['box_no'],$i,$num,$row_page,$page); //呼叫 使用GOGOBOX內建搜尋



}



}else{

echo $no.'&nbsp;';//if

}

curl_close ($ch);

}



//這邊就是發送資訊給GOGOBOX叫他搜尋某BOX的所有檔案
//一次搜尋五百筆(預設)

//然後取得資料
function load_gogobox($post_no,$i,$num,$row_page,$page){

$chx = curl_init();

$cookie_file_path = "d:\cookie.txt"; //登入SESSION都記錄在這邊

curl_setopt($chx, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($chx, CURLOPT_COOKIEJAR, $cookie_file_path);

curl_setopt($chx, CURLOPT_COOKIEFILE,$cookie_file_path);



$url = 'http://box3.gogobox.com.tw:8037/app/list_file.cgi';

$post['box_no'] = $post_no; //GOGOBOX會員ID,BOX ID

$post['nPageNo'] = $i; //第幾頁

if($i==$page){

$once_num = $num%$row_page;

}else{

$once_num=$row_page;

}

curl_setopt($chx, CURLOPT_POST,1);

curl_setopt($chx, CURLOPT_URL,$url);

curl_setopt($chx, CURLOPT_POSTFIELDS, $post);


//GOGOBOX 是利用COOKIE來記錄要顯示幾筆
//很久以前看的時候沒有發現
//是前個月(應該吧)看他的JAVASCRIPT 才發現的 =="

curl_setopt($chx, CURLOPT_COOKIE, "CbFileBoxListCnt=".$row_page." ; path=/"); //顯示X筆

$result = curl_exec($chx);

gogobox($result,$once_num);//開始把GOGOBOX內建搜尋的結果(五百筆) 紀錄出來

curl_close ($chx);



}





function gogobox($content,$once_num){ //取回 分析 GOGOBOX內建搜尋
//主要就是一些字串處理


$content = strstr($content,'<!-- list table -->');

$content = substr($content,0,strpos($content,'<!-- list table END -->'));

//echo $content;

for($i=0;$i<$once_num;$i++){

$content = substr($content,strpos($content,'colspan=\'6\'')+10);



$content_link = strip_tags($content,'<td><a>');

$content_data = strip_tags($content,'<td>');





$title = strstr($content_data,'class=\'box_f_name\' valign=\'middle\'>');

$title = strstr($title,'>');

$title = trim(substr($title,1,strpos($title,'</td>')-1));



$name = strstr($content_data,'class=\'box_f_info_01tdu\'>');

$name = strstr($name,'>');

$name = trim(substr($name,1,strpos($name,'</td>')-1));

$size = strstr($content_data,'class=\'box_f_info_02\'>');

$size = strstr($size,'>');

$size = trim(substr($size,1,strpos($size,'</td>')-1));

$date = strstr($content_data,'class=\'box_f_info_04\'>');

$date = strstr($date,'>');

$date = trim(substr($date,1,strpos($date,'</td>')-1));



$link = strstr($content_link,'onClick="Copy_Link');

$link = strstr($link,'\'');

$link = substr($link,1);

$link = trim(substr($link,0,strpos($link,'\'')-1));

$return['file_title']=mysql_escape_string($title);

$return['file_name']=mysql_escape_string($name);

$return['file_size']=mysql_escape_string($size);

$return['file_link']=mysql_escape_string($link);

$return['db_date']=mktime();

//data_creat_some("gogobox",$return); //最後將字串都整理好後,建立到資料庫去
//這邊就不把此FUNCTION寫出來了,可以用var_dump($return)看資料
//之後即可自行應用


}

}


===============引用先前====================
引用先前發的 "GOGOBOX 搜尋引擎"
以下是之前研究GOGOBOX的原由

GOGOBOX 搜尋引擎
想必有許多人都也有想過吧!!
當初FINDBOX出來的時候,可是為之驚人啊!!
每天流量都爆破!!顆顆
但是不知怎麼的後來就消失了
======題外話======
(知道的人還請跟我說說吧!THX!~)
只知道之後GOGOBOX有改版
檔案的下載位置好像都有改變的樣子(不太記得了)
所以FINDBOX就失效了??? (I REALLY DONT KNOW)
(或是被警察伯伯抓了???這樣有犯法嗎??)
這一值都是我現在的疑問 顆顆

不過現在好像又有很多人有架類似的站吧!!
顆顆~~這邊也是其中之一
======題外話======

所以就決定再來試做一個 GOGOBOX搜尋引擎
於是就花了許多時間在研究他的檔案位置
最後是有得出一些結論 :
第一個 GOGOBOX 每個會員都有編號
第二個 GOGOBOX 每個檔案也都有編號
第三個 GOGOBOX 每個檔案下載位置都有加上會員編號
第四個 不知道怎麼不列會員編號就下載到檔案
最後 GOGOBOX 必須要有會員編號 和檔案編號才能下載 (不知道對不對)

但是還有一個線索,就是他每個會員BOX裡面都可以搜尋到他所PO的所有檔案

結合以上幾點就用PHP寫出了一個搜尋器

因為不可能直接使用GOGOBOX的搜尋引擎,所以大概就是要像GOOGLE一樣
把檔案都先搜索過然後存到資料庫,使用者再直接搜尋這個資料庫
這樣速度才OK

SO...

目前今天花了一個下午,大概寫出了一些,已經可以廣搜GOGOBOX了
不過速度有點慢 == 十分鐘 約 幾千個檔案而已
(過了幾天,目前約四十萬筆吧!!)
一切還在測試中,...至於公開程式碼 大概會慢一點公開
ps 目前搜了兩萬五千筆左右 == 離全部還好遠好遠
===============宣告====================
此篇內容僅供測試,如果有利用做不法行為,與本人無關

2009年8月29日 星期六

GOGOBOX 搜尋引擎

GOGOBOX 搜尋引擎

========================================
9/17
現在已經公布 "GOGOBOX搜尋引擎PHP程式碼" 摟!!

請到 福球亂彈 (方便討論喔!!)

GOGOBOX 搜尋引擎 PHP程式碼公開

或是

本BLOG (有意見或建議可留言喔!!)

GOGOBOX 搜尋引擎 PHP程式碼公開


觀看最新版本
========================================
9/1
剛剛把已經把搜到的GOGOBOX檔案部分上傳到免費空間了
(三十萬筆,因為空間不夠= =)
可以測試看看,不過此空間的廣告有點討厭 = ="
福球亂彈 => 福球程式設計(PHP) => PHP主題討論 => GOGOBOX搜尋引擎測試
順便廣告一下論壇 ==

歡迎大家來討論!!

========================================


最近和朋友想說要架一個論壇
主要是要放一些和興趣相關的內容
當然有程式設計的版面摟!!

福球亂彈 歡迎大家參觀,也歡迎一起經營喔(誠摯的邀請版主ING)!!
PHP版
(還在計畫中,請不要嫌棄)

再分配管理版面的時候,當然我就是負責"電腦"這方面的板塊~呵呵
但是想阿想的!
最重要的,還是要有主打的東西吧!!
這樣才有吸引人的地方。

再想阿想的,就想到了 GOGOBOX 搜尋引擎
想必有許多人都也有想過吧!!
當初FINDBOX出來的時候,可是為之驚人啊!!
每天流量都爆破!!顆顆
但是不知怎麼的後來就消失了
======題外話======
(知道的人還請跟我說說吧!THX!~)
只知道之後GOGOBOX有改版
檔案的下載位置好像都有改變的樣子(不太記得了)
所以FINDBOX就失效了??? (I REALLY DONT KNOW)
(或是被警察伯伯抓了???這樣有犯法嗎??)
這一值都是我現在的疑問 顆顆

不過現在好像又有很多人有架類似的站吧!!
顆顆~~這邊也是其中之一
======題外話======

所以就決定再來試做一個 GOGOBOX搜尋引擎
於是就花了許多時間在研究他的檔案位置
最後是有得出一些結論 :
第一個 GOGOBOX 每個會員都有編號
第二個 GOGOBOX 每個檔案也都有編號
第三個 GOGOBOX 每個檔案下載位置都有加上會員編號
第四個 不知道怎麼不列會員編號就下載到檔案
最後 GOGOBOX 必須要有會員編號 和檔案編號才能下載 (不知道對不對)

但是還有一個線索,就是他每個會員BOX裡面都可以搜尋到他所PO的所有檔案

結合以上幾點就用PHP寫出了一個搜尋器

因為不可能直接使用GOGOBOX的搜尋引擎,所以大概就是要像GOOGLE一樣
把檔案都先搜索過然後存到資料庫,使用者再直接搜尋這個資料庫
這樣速度才OK

SO...

目前今天花了一個下午,大概寫出了一些,已經可以廣搜GOGOBOX了
不過速度有點慢 == 十分鐘 約 幾千個檔案而已
(過了幾天,目前約四十萬筆吧!!)
一切還在測試中,...至於公開程式碼 大概會慢一點公開
ps 目前搜了兩萬五千筆左右 == 離全部還好遠好遠
(目前想辦法讓論壇人氣多一點,所以想讓此搜尋變成主打 顆顆 (作夢ing))
最後 歡迎大家來參觀福球亂彈

==============END=================

2009年8月22日 星期六

PHP 自動更新進入yahoo 搶拍賣 PART II 新版

之後又寫了一個版本的


搶拍賣(日貨)用的程式,就是會固定幾秒就搜索一次賣家的帳號,只要最上面的連結改變(表示PO新貨)

馬上就會進去新的頁面
==============================================
使用方法

第一格式輸入YAHOO賣家的網址(清單瀏覽,新貨出現在最上面)

然後可以按送出試試看

下面會出現一行 就是目前最新的物品

如果不是出現現在最新的物品

可以在第二格輸入數字

從 0 開始 01234...

就是要列出目前最新的物品連結

OK之後就點 START 就會開始每X秒自動掃一次

在後面的 下面這行的5就是每五秒掃一次 可以自己改變

echo '<meta http-equiv="refresh" content="5; url=test.php">';

PS 不過此版本還是不能脫逃 YAHOO 999的命運
每五秒一次 大概十五分鐘就壽命終結 ==

目前努力研究逃脫YAHOO 999 的命運

歡迎一起討論^^

最新發現!!!

最近測試發現
用APACHE 傳送過多造成999
IE FIREFOX 還是可以正常瀏覽
因此這裡可能就是可以破解的地方!!

==============================================

<form name="form1" method="get" action="test.php">

<input type="text" name="url" id="textfield">

<input type="submit" name="button" id="button" value="送出">

<input name="num" type="text" id="num">

<input type="submit" name="star" id="star" value="star">

<input type="submit" name="stop" id="stop" value="stop">

</form>

<?php

session_start();

if(isset($_GET['url']) and @$_GET['url'] != ''){

$_SESSION['url']=$_GET['url'];

}

if(isset($_SESSION['url'])){

$url = $_SESSION['url'];

}else{

$url ="http://tw.user.bid.yahoo.com/tw/user/lainjp98?userID=lainjp98&catID=&catIDselect=&clf=&u=:lainjp98&s1=ptime&o1=d&at=false";

}

if(isset($_GET['num']) and @$_GET['num'] != ''){

$_SESSION['num']=$_GET['num'];

}

if(isset($_SESSION['num'])){

$next = $_SESSION['num'];

}else{

$next = 1;

}

$fp =fopen($url,"r");

$content = stream_get_contents($fp);

$content = str_replace('刊登時間','||',$content);

$content = strstr($content,'||');

$content = strip_tags($content,'<a>');

$content = substr($content,60);

$i=0;

//$next = 5;

while($content = strstr($content,'<')){

//$content = strstr($content,'<');

$pos = strpos($content,'>')+1;

$pos = strpos($content,'>',$pos)+1;

$content_link = substr($content,0,$pos);

$content = substr($content,$pos);

if($i==$next){

if(@$_SESSION['check'] ==1){

if($_SESSION['temp'] != $content_link){

$content_link = strstr($content_link,'"');

$content_link = substr($content_link,1);

$pos = strpos($content_link,'"');

$content_link = substr($content_link,0,$pos);

echo '<meta http-equiv="refresh" content="1; url='.$content_link.'">';

}



}

if(@$_GET['star'] =='star'){

$_SESSION['temp']=$content_link;

$_SESSION['check'] =1;

}

echo $content_link."<br>";

}

$i++;

}

if(@$_GET['stop'] =='stop'){

$_SESSION['check'] =0;

}

if(@$_SESSION['check'] ==1){

echo '<meta http-equiv="refresh" content="5; url=test.php">';

}

fclose($fp);

?>

2009年7月17日 星期五

NEW!!樹狀分類程式碼生產器 (網頁介面)

樹狀分類產生器


更新 : 新增網頁介面樹狀分類生產器,不用安裝PHP即可使用!!
更新 : 增加了帳號功能(提供紀錄功能,存入MYSQL),大家可以將自己的樹狀分類原始碼記錄下來,不過由於沒有密碼,請不要修改到別人的
TEST 帳號 : fqstory
請輸入 fqstory 然後按 read 即可知道

樹狀分類生產器 網頁介面

來用用看吧!!

===============源由===============
由於BLOG文章日益增加
但是GOOGLE blogger本身提供的"分類"
只能做大致上的分類
他只能提供一層的聯結
但是BLOG中的文章主題分類有很多
所以已經不夠使用,連自己都找不太到之前寫的文章
所以就上網找看看有沒有別人寫好的 "樹狀分類"
這樣才能夠快速找到所需要的文章

於是找阿找的...

終於在 finalevil's blog 發現了 "樹狀分類產生器"

他是用JAVA寫的基本上已經能滿足需求,而且能做到多層分類連結
(也應該支援大部分blog)

只是問題來了,如果有好多好多篇文章,每層每篇作連結都要加入好多語法
這樣實在很麻煩
雖然他finalevil's blog 裡面還有提供,自動產生語法的工具
但是發現還是不實用
第一、如果要新增加新的分層分類,之前打的都會不見
第二、如果日後要新增,那就要全部重來
所以最後決定自己寫一個程式碼產生器,方便自己使用

不過最後運行當然還是用他的 顆顆顆
至於最後呈現結果請看右邊的樹狀分類連結(目錄) 顆顆顆


============檔案輸入格式===============
t 為第一層樹狀分類 (可改)

c 為第二層樹狀分類 (可改)
p 為第三層樹狀分類 (可改)
| 為確定樹狀分類哪一層的分隔 (可改)
, 為分隔 "顯示樹狀分類名稱" ,"連結" , "註解" (可改)
; 為斷行,使程式讀取下一個分層 (可改)


==========最後呈現的格式如下==========
//這是此BLOG的目錄,結果如右邊最上方目錄
t|PHP先看,http://fq-story.blogspot.com/2009/05/php.html;
t|PHP基礎教學;
c|APACHE PHP MYSQL in WindowsXP 安裝教學,http://fq-story.blogspot.com/2009/05/phpini.html;
c|0.基本HTML語法,http://fq-story.blogspot.com/2009/05/html.html;
c|1.基本指令;
c|2.重複迴圈,http://fq-story.blogspot.com/2009/05/2.html;
c|3.判斷事件;
c|4.字串處理;
c|5.常用其他;
t|PHP實用文章;
c|0.PHP基礎須知;
p|0-a.PHP(簡介),http://fq-story.blogspot.com/2009/05/0-aphp.html;
p|0-b.PHP 安裝 (LINUX),http://fq-story.blogspot.com/2009/05/0-bphp-linux.html;
p|0-c.php.ini 配置詳細解說,http://fq-story.blogspot.com/2009/05/phpini_23.html;
c|1.PHP語法索引;
p|PHP函數語法索引,http://fq-story.blogspot.com/2009/07/php.html;
p|PHP MYSQL 函數語法與說明,http://fq-story.blogspot.com/2009/07/php-mysql.html;
c|2.PHP PLUG外掛;
p|Smarty;
t|PHP程序程式碼;
c|PHP資料處理相關;
p|HTML語法測試機;
p|利用php將ncbi的data存入自己的mysql中,http://fq-story.blogspot.com/2009/05/phpncbidatamysql.html;
p|樹狀分類程式碼產生器,http://fq-story.blogspot.com/2009/07/blog-post.html;
c|PHP與網路連線相關;
p|PHP CURL 發送 GET 和 POST 語法,http://fq-story.blogspot.com/2009/05/php-curl-get-post.html;
p|PHP 傳送GET使用fsockopen 取代CURL 取得回應,http://fq-story.blogspot.com/2009/05/php-getfsockopen-curl.html;
p|PHP 傳送POST使用fsockopen 取代CURL 取得回應,http://fq-story.blogspot.com/2009/05/php-postfsockopen-curl.html ;
p|PHP 自動更新進入yahoo 拍賣,http://fq-story.blogspot.com/2009/05/php-yahoo.html;
t|PHP Game;
c|RGP舊遊戲資料,http://fq-story.blogspot.com/2009/05/php-rpg-game.html;
p|index.php,http://fq-story.blogspot.com/2009/06/indexphp.html;
P|checkmap.php,http://fq-story.blogspot.com/2009/06/checkmapphp.html;
p|check.php,http://fq-story.blogspot.com/2009/06/checkphp.html;
p|charator.php,http://fq-story.blogspot.com/2009/06/charatorphp.html;
p|gmain.php,http://fq-story.blogspot.com/2009/05/gmainphp.html;
p|battling.php,http://fq-story.blogspot.com/2009/05/battlingphp.html;
p|battle.php,http://fq-story.blogspot.com/2009/05/battlephp.html;
c|GGAME;
t|C語言與C++;
c|C語言學習實錄,http://fq-story.blogspot.com/search/label/C%E8%AA%9E%E8%A8%80%E5%AD%B8%E7%BF%92%E5%AF%A6%E9%8C%84;
p|C語言學習實錄 起源,http://fq-story.blogspot.com/2009/07/c.html;
p|C語言學習實錄之一,http://fq-story.blogspot.com/2009/07/c_08.html;
p|C語言學習實錄之二,http://fq-story.blogspot.com/2009/07/c_09.html;
t|楓之谷,http://fq-story.blogspot.com/2009/06/blog-post.html;
t|BMP和JPEG圖檔格式
c|BMP 點陣圖(Bitmap)檔案格式,http://fq-story.blogspot.com/2009/06/bmp-bitmap.html;
c|JPG/JPEG 檔案格式,http://fq-story.blogspot.com/2009/06/jpgjpeg.html;
t|好用程式;
c|MSN將圖片畫出來,以手繪訊息送出去,http://fq-story.blogspot.com/search/label/MSN;



//ps 所以只要保留以上的格式,以後要增加或修改,都可以簡單使用
==========最後呈現的格式如上==========


這是兩層的 樹狀分類生產器 (java原程式碼 還是用finalevil的)
不過此php現在還沒有放到網路上,所以可能要在自己家弄弄瞜
以後會寫成比較完整方便的網頁
只用到:
t 為第一層樹狀分類 (可改)

c 為第二層樹狀分類 (可改)
ps 這是剛開始寫出來的,但發現兩層還是不夠用,所以下面又寫的一個三層的
所以註解就在下面"三層樹狀分類程式碼生產器"的地方寫

================================
兩層樹狀分類程式碼生產器,php程式碼開始
================================
<?php

$title = 't';

$content = 'c';


$star ='|';

$dis = ',';

$end = ';';

$string ='<p>

t|abc,cba;<br />

c|bbb,ccc;<br />

c|ccc,ddd;<br />

t|eee,fff;<br />

c|ccc,ddd;</p>';

$string = str_replace(" ", "",trim($string));

$string = str_replace("<p>", "",trim($string));

$string = str_replace("<br />", "",trim($string));

$string = str_replace("<br/>", "",trim($string));

$string = str_replace("<br>", "",trim($string));

echo $string;

$check = 1;

$string = explode($end,$string);

echo '<style>

ul.mktree li { list-style: none; }ul.mktree, ul.mktree ul , ul.mktree li { margin-left:10px; padding:0px; }ul.mktree li .bullet { padding-left: 15px; }ul.mktree li.liOpen .bullet { cursor: pointer; background: url(http://finalevillee.googlepages.com/minus.gif) center left no-repeat; }ul.mktree li.liClosed .bullet { cursor: pointer; background: url(http://finalevillee.googlepages.com/plus.gif) center left no-repeat; }ul.mktree li.liBullet .bullet { cursor: default; background: url(http://finalevillee.googlepages.com/bullet.gif) center left no-repeat; }ul.mktree li.liOpen ul { display: block; }ul.mktree li.liClosed ul { display: none; }ul.mktree li { font-size: 12pt; }ul.mktree li ul li { font-size: 10pt; }ul.mktree li ul li ul li { font-size: 8pt; }ul.mktree li ul li ul li ul li { font-size: 6pt; }</style>

<script src="http://finalevillee.googlepages.com/tree.js"></script>';

echo '<ul class="mktree">';

for($i=0;$i<count($string)-1;$i++){

$string[$i] = explode($star,$string[$i]);

$string[$i][0] = trim($string[$i][0]);

$string[$i][1] = explode($dis,$string[$i][1]);

if($string[$i][0] == $title and $check == 1){

$check =2;

echo '<li>';

echo '<a href="'.$string[$i][1][1].'">'.$string[$i][1][0].'</a>';

echo '<ul>';

}elseif($string[$i][0] == $content){

echo '<li><a href="'.$string[$i][1][1].'">'.$string[$i][1][0].'</a></li>';

}elseif($string[$i][0] == $title and $check != 1){

echo '</ul></li><li>';

echo '<a href="'.$string[$i][1][1].'">'.$string[$i][1][0].'</a>';

echo '<ul>';

}

}

echo '</ul></li></ul><script>convertTrees();</script>';

?>
//此程式沒測試過,請使用下面的(TEST OK)

================================
兩層樹狀分類程式碼生產器,php程式碼結束
================================


接下來是三層的樹狀分類程式碼生產器
"檔案輸入格式中" 都會用到



================================
三層樹狀分類程式碼生產器,php程式碼開始
================================


<?php

/*=====三層樹狀分類程式碼生產器,php程式碼=======*/

$string ='

t|PHP先看,http://fq-story.blogspot.com/2009/05/php.html;

t|PHP基礎教學;

c|APACHE PHP MYSQL in WindowsXP 安裝教學,http://fq-story.blogspot.com/2009/05/phpini.html;

c|0.基本HTML語法,http://fq-story.blogspot.com/2009/05/html.html;

c|1.基本指令;

c|2.重複迴圈,http://fq-story.blogspot.com/2009/05/2.html;

t|PHP實用文章;

c|0.PHP基礎須知;

p|0-a.PHP(簡介),http://fq-story.blogspot.com/2009/05/0-aphp.html;

p|0-b.PHP 安裝 (LINUX),http://fq-story.blogspot.com/2009/05/0-bphp-linux.html;

p|0-c.php.ini 配置詳細解說,http://fq-story.blogspot.com/2009/05/phpini_23.html;


';//將樹狀分類放上面

$string = str_replace(" ", "",trim($string)); //清除空白

$string = str_replace("<p>", "",trim($string)); //清除段落

$string = str_replace("<br />", "",trim($string)); //清除換行

$string = str_replace("<br/>", "",trim($string)); //清除換行

$string = str_replace("<br>", "",trim($string)); //清除換行

/*如果有需要請自行增加*/

$title = 't'; //第一層樹狀分類

$content = 'c'; //第二層樹狀分類

$ps = 'p'; //第三層樹狀分類

$star ='|'; //確定樹狀分類哪一層的分隔

$dis = ','; //為分隔 "顯示樹狀分類名稱" ,"連結" , "註解"

$end = ';'; //為斷行,使程式讀取下一個分層

echo $string;

$t= 1;

$c= 1;

$p= 1;

$string = explode($end,$string);

echo '<style>

ul.mktree li { list-style: none; }ul.mktree, ul.mktree ul , ul.mktree li { margin-left:10px; padding:0px; }ul.mktree li .bullet { padding-left: 15px; }ul.mktree li.liOpen .bullet { cursor: pointer; background: url(http://finalevillee.googlepages.com/minus.gif) center left no-repeat; }ul.mktree li.liClosed .bullet { cursor: pointer; background: url(http://finalevillee.googlepages.com/plus.gif) center left no-repeat; }ul.mktree li.liBullet .bullet { cursor: default; background: url(http://finalevillee.googlepages.com/bullet.gif) center left no-repeat; }ul.mktree li.liOpen ul { display: block; }ul.mktree li.liClosed ul { display: none; }ul.mktree li { font-size: 12pt; }ul.mktree li ul li { font-size: 10pt; }ul.mktree li ul li ul li { font-size: 8pt; }ul.mktree li ul li ul li ul li { font-size: 6pt; }</style>

<script src="http://finalevillee.googlepages.com/tree.js"></script>';

echo '<ul class="mktree">';

for($i=0;$i<count($string)-1;$i++){

$string[$i] = explode($star,$string[$i]);

$string[$i][0] = trim($string[$i][0]);

$string[$i][1] = explode($dis,$string[$i][1]);

if($string[$i][0] == $title and $t == 1){

$t =2;

echo '<li>';

echo '<a href="'.@$string[$i][1][1].'" title="'.@$string[$i][1][2].'">'.@$string[$i][1][0].'</a>';

}elseif($string[$i][0] == $content and $c ==1){

$c =2;

echo '<ul><li><a href="'.@$string[$i][1][1].'" title="'.@$string[$i][1][2].'">'.@$string[$i][1][0].'</a>';

}elseif($string[$i][0] == $content and $c ==2){

if($p ==1){

echo '</li><li><a href="'.@$string[$i][1][1].'" title="'.@$string[$i][1][2].'">'.@$string[$i][1][0].'</a>';

}elseif($p ==2){

$p =1;

echo '</ul></li><li><a href="'.@$string[$i][1][1].'" title="'.@$string[$i][1][2].'">'.@$string[$i][1][0].'</a>';

}

}elseif($string[$i][0] == $ps and $p ==1){

$p =2;

echo '<ul><li><a href="'.@$string[$i][1][1].'" title="'.@$string[$i][1][2].'">'.@$string[$i][1][0].'</a></li>';

}elseif($string[$i][0] == $ps and $p ==2){

echo '<li><a href="'.@$string[$i][1][1].'" title="'.@$string[$i][1][2].'">'.@$string[$i][1][0].'</a></li>';

}elseif($string[$i][0] == $title and $t == 2){

if($c ==2 and $p ==1){

$c =1;

echo '</li></ul><li>';

echo '<a href="'.@$string[$i][1][1].'" title="'.@$string[$i][1][2].'">'.$string[$i][1][0].'</a>';

}elseif($c ==2 and $p ==2){

$c =1;

$p =1;

echo '</ul></li></ul><li>';

echo '<a href="'.@$string[$i][1][1].'" title="'.@$string[$i][1][2].'">'.$string[$i][1][0].'</a>';

}elseif($c==1){

echo '</li><li>';

echo '<a href="'.@$string[$i][1][1].'" title="'.@$string[$i][1][2].'">'.$string[$i][1][0].'</a>';

}

}

}

echo '</ul></li></ul><script>convertTrees();</script>';

?>
==============================
三層樹狀分類程式碼生產器,php程式碼結束
==============================
如果覺得好用的話,歡迎分享!!


++不過好像只適用IE = =

======END======

2009年7月13日 星期一

搶先看!! 藥物設計 PHP讀取*.mol2藥物檔案,並且以3D結構圖形輸出

搶先看!! 藥物設計 PHP讀取*.mol2藥物檔案,並且以3D結構圖形輸出

這就是最近在研究的目標

最終目標就是用PHP寫出藥物設計DOCKING的程式出來

不過這個目標遠大

所以還是一步一步先來

首先第一個當然就是要讀取 LIGAND 和 PROTEIN 的檔案

並且能把3d圖形顯示出來

所以就先分析了一下普遍藥物LIGAND的檔案 *.mol2 檔

然後做出一些分析......

================待補齊==============

至於輸出結果為以下


寄件者 FQstory


寄件者 FQstory


Z軸為 以Z軸為不動 轉動XY平面

X軸為 以X軸為不動 轉動YZ平面

其他的就設定大小和出現位置

不過 當然 這是不能直接轉動的

因為他是PHP麻

他是以圖片輸出 然後顯示出來

=============程式碼==============

<?php

function readligand($name){

$checkprint = 0;

$i = 1;

$fp = fopen($name,"r");

$atom ='';

while(!feof($fp)){

$read = fgets($fp);

if(trim($read) == '@<TRIPOS>ATOM'){

$checkprint = 1;

}elseif(trim($read) == '@<TRIPOS>BOND'){

$checkprint = 2;

$i =1;

}elseif($checkprint > 0){

$atoms ='';

$atom = explode(" ",$read);

for($j=0;$j<count($atom);$j++){ //去除多個空白只留一個

if($atom[$j] != ''){

$atoms = $atoms.' '.$atom[$j];

}

}



$atomr[$checkprint][$i] = explode(" ",$atoms);

if($checkprint == 1){

$atomr[$checkprint][$i][3] = $atomr[$checkprint][$i][3];

$atomr[$checkprint][$i][4] = $atomr[$checkprint][$i][4];

$atomr[$checkprint][$i][5] = $atomr[$checkprint][$i][4];

//$atomr[$checkprint][$i][5] = $atomr[$checkprint][$i][5]*50+400;

}

//echo chop($read)."<br>";

$i++;

}

}

fclose($fp);

return $atomr;

}



function change($x,$y,$z,$xp,$em,$move,$theta,$phi,$turny){

//$r = sqrt($x*$x+$y*$y+$z*$z);

$theta = $theta/180*3.14;

$phi = $phi/180*3.14;

//轉Z軸

$new['x'] = $x*cos($theta)-$y*sin($theta);

$new['y'] = $x*sin($theta)+$y*cos($theta);

$new['z'] = $z;

//轉X軸

$new['x'] = $new['x'];

$new['y'] = $new['y']*cos($phi)+$new['z']*sin($phi);

$new['z'] = $new['y']*sin($phi)+$new['z']*cos($phi);

//轉Y軸

$new['x'] = $new['x']*cos($turny)+$new['z']*sin($turny);

$new['y'] = $new['y'];

$new['z'] = $new['x']*sin($turny)-$new['z']*cos($turny);

$new['x'] = $new['x']*$em+$xp/$move;

$new['y'] = $new['y']*$em+$xp/$move;

//$new['z'] = $new['z']*$xp/$em+$xp/$move;

//$new['x'] = $x*$xp/$em+$xp/$move;

//$new['y'] = $y*$xp/$em+$xp/$move;

return $new;

}



if(@$_POST['show'] == "SHOW"){

$filename = $_POST['filename'];

$theta = $_POST['theta'];

$phi =$_POST['phi'];

$turny =$_POST['turny'];

$em = $_POST['em'];//LIGAND大小,越小越大

$move = $_POST['move'];//離邊界位置 , 預設2

$xp = $_POST['xp'];//圖檔邊長(正方)



// 1.建立新影像

$im = imagecreate($xp,$xp);

// 2. 定義白色顏色的 RGB (背景顏色)

$white = imagecolorallocate($im, 255, 255, 255);

// 3. 定義黑色的 RGB (線的顏色)

$black = imagecolorallocate($im, 0, 0, 0);

$atomr = readligand($filename);//atomsread

for($i =1;$i<=count($atomr[1]);$i++){

$x = $atomr[1][$i][3];

$y = $atomr[1][$i][4];

$z = $atomr[1][$i][5];

$f = $atomr[2][$i][2];//讀取BOND

$l = $atomr[2][$i][3];//讀取BOND

$x1 = $atomr[1][$f][3];

$y1 = $atomr[1][$f][4];

$z1 = $atomr[1][$f][5];

$x2 = $atomr[1][$l][3];

$y2 = $atomr[1][$l][4];

$z2 = $atomr[1][$l][5];

$new = change($x,$y,$z,$xp,$em,$move,$theta,$phi,$turny);//dot

$newf = change($x1,$y1,$z1,$xp,$em,$move,$theta,$phi,$turny);//bond

$newl = change($x2,$y2,$z2,$xp,$em,$move,$theta,$phi,$turny);

imageline($im, $newf['x'], $newf['y'], $newl['x'], $newl['y'], $black);// 4. 開始畫線

imagesetpixel ($im,$new['x'],$new['y'],$black);//畫點

}



// 5. 做成 png 圖檔並輸出

imagejpeg($im, "draw.jpg");

// 6. 完成後將圖檔毀滅

imagedestroy($im);

echo '<img src="draw.jpg" width="'.$xp.'" height="'.$xp.'" />';

}

?>



<form id="form1" name="form1" method="post" action="readligand.php">

<p>檔案名稱:

<input name="filename" type="text" id="filename" value="<?php echo @$_POST['filename'];?>" />

<input type="submit" name="show" id="show" value="SHOW" />

</p>

<p>Z軸:

<input name="theta" type="text" id="theta" value="<?php echo @$_POST['theta'];?>" />

</p>

<p>X軸:

<input name="phi" type="text" id="phi" value="<?php echo @$_POST['phi'];?>" />

</p>

<p>Y軸:

<input name="turny" type="text" id="turny" value="<?php echo @$_POST['turny'];?>" />

</p>

<p>LIGAND SIZE:

<input name="em" type="text" id="em" value="<?php echo @$_POST['em'];?>" />

</p>

<p>邊界:

<input name="move" type="text" id="move" value="<?php echo @$_POST['move'];?>" />

預設2,為圖中心</p>

<p>檔案邊界(像素):

<input name="xp" type="text" id="xp" value="400" />

</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

</form>

已輸出至 <a href="../draw.jpg">draw.jpg</a>


=============程式碼==============

實際測試結果好像有點怪怪的
但又不知道哪邊怪怪的

================END==================

2009年7月11日 星期六

t|PHP先看
t|PHP基礎教學
c|APACHE PHP MYSQL in WindowsXP 安裝教學
c|0.基本HTML語法
c|1.基本指令
c|2.重複迴圈
c|3.判斷事件
c|4.字串處理
c|5.常用其他
t|PHP實用文章
c|0.PHP基礎須知
p|0-a.PHP(簡介)
p|0-b.PHP 安裝 (LINUX)
p|0-c.php.ini 配置詳細解說
c|1.PHP語法索引
p|PHP函數語法索引,http://fq-story.blogspot.com/2009/07/php.html
p|PHP MYSQL 函數語法與說明,http://fq-story.blogspot.com/2009/07/php-mysql.html
c|2.PHP PLUG外掛
p|Smarty

t|PHP程序程式碼
c|PHP資料處理相關
p|HTML語法測試機
p|利用php將ncbi的data存入自己的mysql中
p|樹狀分類程式碼產生器,http://fq-story.blogspot.com/2009/07/blog-post.html
c|PHP與網路連線相關
p|PHP CURL 發送 GET 和 POST 語法
p|PHP 傳送GET使用fsockopen 取代CURL 取得回應
p|PHP 傳送POST使用fsockopen 取代CURL 取得回應
p|PHP 自動更新進入yahoo 拍賣
t|PHP Game
c|RGP舊遊戲資料
c|GGAME
t|C語言與C++
c|C語言學習實錄
p|C語言學習實錄 起源,http://fq-story.blogspot.com/2009/07/c.html
p|C語言學習實錄之一,http://fq-story.blogspot.com/2009/07/c_08.html
p|C語言學習實錄之二,http://fq-story.blogspot.com/2009/07/c_09.html
t|楓之谷,http://fq-story.blogspot.com/2009/06/blog-post.html

2009年7月10日 星期五

樹狀分類產程式碼生器

樹狀分類產生器

已經有網頁介面了
請網新的頁面看
===============源由===============
由於BLOG文章日益增加
但是GOOGLE blogger本身提供的"分類"
只能做大致上的分類
他只能提供一層的聯結
但是BLOG中的文章主題分類有很多
所以已經不夠使用,連自己都找不太到之前寫的文章
所以就上網找看看有沒有別人寫好的 "樹狀分類"
這樣才能夠快速找到所需要的文章
於是找阿找的...
終於在 finalevil's blog 發現了 "樹狀分類產生器"
他是用JAVA寫的基本上已經能滿足需求,而且能做到多層分類連結
(也應該支援大部分blog)
只是問題來了,如果有好多好多篇文章,每層每篇作連結都要加入好多語法
這樣實在很麻煩
雖然他finalevil's blog 裡面還有提供,自動產生語法的工具
但是發現還是不實用
第一、如果要新增加新的分層分類,之前打的都會不見
第二、如果日後要新增,那就要全部重來
所以最後決定自己寫一個程式碼產生器,方便自己使用
不過最後運行當然還是用他的 顆顆顆
至於最後呈現結果請看右邊的樹狀分類連結(目錄) 顆顆顆

============檔案輸入格式===============
t 為第一層樹狀分類 (可改)
c 為第二層樹狀分類 (可改)
p 為第三層樹狀分類 (可改)
| 為確定樹狀分類哪一層的分隔 (可改)
, 為分隔 "顯示樹狀分類名稱" ,"連結" , "註解" (可改)
; 為斷行,使程式讀取下一個分層 (可改)

==========最後呈現的格式如下==========
//這是此BLOG的目錄,結果如右邊最上方目錄

t|PHP先看,http://fq-story.blogspot.com/2009/05/php.html;
t|PHP基礎教學;
c|APACHE PHP MYSQL in WindowsXP 安裝教學,http://fq-story.blogspot.com/2009/05/phpini.html;
c|0.基本HTML語法,http://fq-story.blogspot.com/2009/05/html.html;
c|1.基本指令;
c|2.重複迴圈,http://fq-story.blogspot.com/2009/05/2.html;
c|3.判斷事件;
c|4.字串處理;
c|5.常用其他;
t|PHP實用文章;
c|0.PHP基礎須知;
p|0-a.PHP(簡介),http://fq-story.blogspot.com/2009/05/0-aphp.html;
p|0-b.PHP 安裝 (LINUX),http://fq-story.blogspot.com/2009/05/0-bphp-linux.html;
p|0-c.php.ini 配置詳細解說,http://fq-story.blogspot.com/2009/05/phpini_23.html;
c|1.PHP語法索引;
p|PHP函數語法索引,http://fq-story.blogspot.com/2009/07/php.html;
p|PHP MYSQL 函數語法與說明,http://fq-story.blogspot.com/2009/07/php-mysql.html;
c|2.PHP PLUG外掛;
p|Smarty;
t|PHP程序程式碼;
c|PHP資料處理相關;
p|HTML語法測試機;
p|利用php將ncbi的data存入自己的mysql中,http://fq-story.blogspot.com/2009/05/phpncbidatamysql.html;
p|樹狀分類程式碼產生器,http://fq-story.blogspot.com/2009/07/blog-post.html;
c|PHP與網路連線相關;
p|PHP CURL 發送 GET 和 POST 語法,http://fq-story.blogspot.com/2009/05/php-curl-get-post.html;
p|PHP 傳送GET使用fsockopen 取代CURL 取得回應,http://fq-story.blogspot.com/2009/05/php-getfsockopen-curl.html;
p|PHP 傳送POST使用fsockopen 取代CURL 取得回應,http://fq-story.blogspot.com/2009/05/php-postfsockopen-curl.html ;
p|PHP 自動更新進入yahoo 拍賣,http://fq-story.blogspot.com/2009/05/php-yahoo.html;
t|PHP Game;
c|RGP舊遊戲資料,http://fq-story.blogspot.com/2009/05/php-rpg-game.html;
p|index.php,http://fq-story.blogspot.com/2009/06/indexphp.html;
P|checkmap.php,http://fq-story.blogspot.com/2009/06/checkmapphp.html;
p|check.php,http://fq-story.blogspot.com/2009/06/checkphp.html;
p|charator.php,http://fq-story.blogspot.com/2009/06/charatorphp.html;
p|gmain.php,http://fq-story.blogspot.com/2009/05/gmainphp.html;
p|battling.php,http://fq-story.blogspot.com/2009/05/battlingphp.html;
p|battle.php,http://fq-story.blogspot.com/2009/05/battlephp.html;
c|GGAME;
t|C語言與C++;
c|C語言學習實錄,http://fq-story.blogspot.com/search/label/C%E8%AA%9E%E8%A8%80%E5%AD%B8%E7%BF%92%E5%AF%A6%E9%8C%84;
p|C語言學習實錄 起源,http://fq-story.blogspot.com/2009/07/c.html;
p|C語言學習實錄之一,http://fq-story.blogspot.com/2009/07/c_08.html;
p|C語言學習實錄之二,http://fq-story.blogspot.com/2009/07/c_09.html;
t|楓之谷,http://fq-story.blogspot.com/2009/06/blog-post.html;
t|BMP和JPEG圖檔格式
c|BMP 點陣圖(Bitmap)檔案格式,http://fq-story.blogspot.com/2009/06/bmp-bitmap.html;
c|JPG/JPEG 檔案格式,http://fq-story.blogspot.com/2009/06/jpgjpeg.html;
t|好用程式;
c|MSN將圖片畫出來,以手繪訊息送出去,http://fq-story.blogspot.com/search/label/MSN;

//ps 所以只要保留以上的格式,以後要增加或修改,都可以簡單使用
==========最後呈現的格式如上==========

這是兩層的 樹狀分類生產器 (java原程式碼 還是用finalevil的)
不過此php現在還沒有放到網路上,所以可能要在自己家弄弄瞜
以後會寫成比較完整方便的網頁
只用到:
t 為第一層樹狀分類 (可改)
c 為第二層樹狀分類 (可改)
ps 這是剛開始寫出來的,但發現兩層還是不夠用,所以下面又寫的一個三層的
所以註解就在下面"三層樹狀分類程式碼生產器"的地方寫
================================
兩層樹狀分類程式碼生產器,php程式碼開始
================================
<?php

$title = 't';

$content = 'c';


$star ='|';

$dis = ',';

$end = ';';

$string ='<p>

t|abc,cba;<br />

c|bbb,ccc;<br />

c|ccc,ddd;<br />

t|eee,fff;<br />

c|ccc,ddd;</p>';

$string = str_replace(" ", "",trim($string));

$string = str_replace("<p>", "",trim($string));

$string = str_replace("<br />", "",trim($string));

$string = str_replace("<br/>", "",trim($string));

$string = str_replace("<br>", "",trim($string));

echo $string;

$check = 1;

$string = explode($end,$string);

echo '<style>

ul.mktree li { list-style: none; }ul.mktree, ul.mktree ul , ul.mktree li { margin-left:10px; padding:0px; }ul.mktree li .bullet { padding-left: 15px; }ul.mktree li.liOpen .bullet { cursor: pointer; background: url(http://finalevillee.googlepages.com/minus.gif) center left no-repeat; }ul.mktree li.liClosed .bullet { cursor: pointer; background: url(http://finalevillee.googlepages.com/plus.gif) center left no-repeat; }ul.mktree li.liBullet .bullet { cursor: default; background: url(http://finalevillee.googlepages.com/bullet.gif) center left no-repeat; }ul.mktree li.liOpen ul { display: block; }ul.mktree li.liClosed ul { display: none; }ul.mktree li { font-size: 12pt; }ul.mktree li ul li { font-size: 10pt; }ul.mktree li ul li ul li { font-size: 8pt; }ul.mktree li ul li ul li ul li { font-size: 6pt; }</style>

<script src="http://finalevillee.googlepages.com/tree.js"></script>';

echo '<ul class="mktree">';

for($i=0;$i<count($string)-1;$i++){

$string[$i] = explode($star,$string[$i]);

$string[$i][0] = trim($string[$i][0]);

$string[$i][1] = explode($dis,$string[$i][1]);

if($string[$i][0] == $title and $check == 1){

$check =2;

echo '<li>';

echo '<a href="'.$string[$i][1][1].'">'.$string[$i][1][0].'</a>';

echo '<ul>';

}elseif($string[$i][0] == $content){

echo '<li><a href="'.$string[$i][1][1].'">'.$string[$i][1][0].'</a></li>';

}elseif($string[$i][0] == $title and $check != 1){

echo '</ul></li><li>';

echo '<a href="'.$string[$i][1][1].'">'.$string[$i][1][0].'</a>';

echo '<ul>';

}

}

echo '</ul></li></ul><script>convertTrees();</script>';

?>
//此程式沒測試過,請使用下面的(TEST OK)
================================
兩層樹狀分類程式碼生產器,php程式碼結束
================================

接下來是三層的樹狀分類程式碼生產器
"檔案輸入格式中" 都會用到

================================
三層樹狀分類程式碼生產器,php程式碼開始
================================

<?php

/*=====三層樹狀分類程式碼生產器,php程式碼=======*/

$string ='

t|PHP先看,http://fq-story.blogspot.com/2009/05/php.html;

t|PHP基礎教學;

c|APACHE PHP MYSQL in WindowsXP 安裝教學,http://fq-story.blogspot.com/2009/05/phpini.html;

c|0.基本HTML語法,http://fq-story.blogspot.com/2009/05/html.html;

c|1.基本指令;

c|2.重複迴圈,http://fq-story.blogspot.com/2009/05/2.html;

t|PHP實用文章;

c|0.PHP基礎須知;

p|0-a.PHP(簡介),http://fq-story.blogspot.com/2009/05/0-aphp.html;

p|0-b.PHP 安裝 (LINUX),http://fq-story.blogspot.com/2009/05/0-bphp-linux.html;

p|0-c.php.ini 配置詳細解說,http://fq-story.blogspot.com/2009/05/phpini_23.html;
';//將樹狀分類放上面

$string = str_replace(" ", "",trim($string)); //清除空白

$string = str_replace("<p>", "",trim($string)); //清除段落

$string = str_replace("<br />", "",trim($string)); //清除換行

$string = str_replace("<br/>", "",trim($string)); //清除換行

$string = str_replace("<br>", "",trim($string)); //清除換行

/*如果有需要請自行增加*/

$title = 't'; //第一層樹狀分類

$content = 'c'; //第二層樹狀分類

$ps = 'p'; //第三層樹狀分類

$star ='|'; //確定樹狀分類哪一層的分隔

$dis = ','; //為分隔 "顯示樹狀分類名稱" ,"連結" , "註解"

$end = ';'; //為斷行,使程式讀取下一個分層

echo $string;

$t= 1;

$c= 1;

$p= 1;

$string = explode($end,$string);

echo '<style>

ul.mktree li { list-style: none; }ul.mktree, ul.mktree ul , ul.mktree li { margin-left:10px; padding:0px; }ul.mktree li .bullet { padding-left: 15px; }ul.mktree li.liOpen .bullet { cursor: pointer; background: url(http://finalevillee.googlepages.com/minus.gif) center left no-repeat; }ul.mktree li.liClosed .bullet { cursor: pointer; background: url(http://finalevillee.googlepages.com/plus.gif) center left no-repeat; }ul.mktree li.liBullet .bullet { cursor: default; background: url(http://finalevillee.googlepages.com/bullet.gif) center left no-repeat; }ul.mktree li.liOpen ul { display: block; }ul.mktree li.liClosed ul { display: none; }ul.mktree li { font-size: 12pt; }ul.mktree li ul li { font-size: 10pt; }ul.mktree li ul li ul li { font-size: 8pt; }ul.mktree li ul li ul li ul li { font-size: 6pt; }</style>

<script src="http://finalevillee.googlepages.com/tree.js"></script>';

echo '<ul class="mktree">';

for($i=0;$i<count($string)-1;$i++){

$string[$i] = explode($star,$string[$i]);

$string[$i][0] = trim($string[$i][0]);

$string[$i][1] = explode($dis,$string[$i][1]);

if($string[$i][0] == $title and $t == 1){

$t =2;

echo '<li>';

echo '<a href="'.@$string[$i][1][1].'" title="'.@$string[$i][1][2].'">'.@$string[$i][1][0].'</a>';

}elseif($string[$i][0] == $content and $c ==1){

$c =2;

echo '<ul><li><a href="'.@$string[$i][1][1].'" title="'.@$string[$i][1][2].'">'.@$string[$i][1][0].'</a>';

}elseif($string[$i][0] == $content and $c ==2){

if($p ==1){

echo '</li><li><a href="'.@$string[$i][1][1].'" title="'.@$string[$i][1][2].'">'.@$string[$i][1][0].'</a>';

}elseif($p ==2){

$p =1;

echo '</ul></li><li><a href="'.@$string[$i][1][1].'" title="'.@$string[$i][1][2].'">'.@$string[$i][1][0].'</a>';

}

}elseif($string[$i][0] == $ps and $p ==1){

$p =2;

echo '<ul><li><a href="'.@$string[$i][1][1].'" title="'.@$string[$i][1][2].'">'.@$string[$i][1][0].'</a></li>';

}elseif($string[$i][0] == $ps and $p ==2){

echo '<li><a href="'.@$string[$i][1][1].'" title="'.@$string[$i][1][2].'">'.@$string[$i][1][0].'</a></li>';

}elseif($string[$i][0] == $title and $t == 2){

if($c ==2 and $p ==1){

$c =1;

echo '</li></ul><li>';

echo '<a href="'.@$string[$i][1][1].'" title="'.@$string[$i][1][2].'">'.$string[$i][1][0].'</a>';

}elseif($c ==2 and $p ==2){

$c =1;

$p =1;

echo '</ul></li></ul><li>';

echo '<a href="'.@$string[$i][1][1].'" title="'.@$string[$i][1][2].'">'.$string[$i][1][0].'</a>';

}elseif($c==1){

echo '</li><li>';

echo '<a href="'.@$string[$i][1][1].'" title="'.@$string[$i][1][2].'">'.$string[$i][1][0].'</a>';

}

}

}

echo '</ul></li></ul><script>convertTrees();</script>';

?>

==============================
三層樹狀分類程式碼生產器,php程式碼結束
==============================

2009年5月23日 星期六

PHP 自動更新進入yahoo 拍賣

因為Q經常逛yahoo拍賣,但是都難以搶到拍賣的東西(太多人下標),而且每次都要一直連看好幾的小時,所以心血來潮寫了一個可以每幾秒鐘,就自動更新一次,如果有新的物品po上去,就會自動進入此商品的網頁中。

不過發現沒有很理想,因為很快就出現 yahoo的錯誤999 = =
大家可以試試看

有分兩個檔案,請放在網站根目錄下的test裡面
TEST1.PHP
<?php

session_start();

$seller = "lainjp98";//請輸入賣家帳號

//$fp = fopen("http://tw.user.bid.yahoo.com/tw/user/".$seller,"r");

$fp = fopen("http://tw.user.bid.yahoo.com/tw/user/".$seller."?userID=".$seller."&catID=&catIDselect=&clf=&u=:".$seller."&s1=ptime&o1=d&at=false","r");

$i = 0;

$j = 0;

while(!feof($fp)){

$read = fgets($fp);

$checkread = substr($read,0,14);

echo $read;

//echo ''.$checkread;

if($checkread ==' <td><a href=' and $i == 0){

if (@$read != $_SESSION['save'] and $_SESSION['check'] == '1'){

$check = 'yes';

$msg = explode ('"',$read);

echo $msg[1];

//header("Location: http://127.0.0.1/test/test2.php");

echo '<meta http-equiv="refresh" content="0'.';'.' url=http://127.0.0.1/test/test2.php?msg='.$msg[1].'">';

//echo '<meta http-equiv="refresh" content="5'.'; '.$msg[1].'">';

}

$_SESSION['save'] = $read;

$_SESSION['check'] = '1';

$i = 1 ;

}


}

fclose($fp);

echo $check;



?>

<meta http-equiv="refresh" content="4">

第二個檔案 test2.php 請這樣命名
<?php
$msg = $_GET['msg'];
//echo $msg;
$fp = fopen($msg,"r");
while(!feof($fp)){
$read = fgets($fp);
echo $read;
}
fclose($fp);
?>



當然這還很陽春,有望大家修改修改,呵呵

===================================