台灣最大程式設計社群網站
線上人數
956
 
會員總數:246265
討論主題:189809
歡迎您免費加入會員
討論區列表 >> PHP >> 資料轉檔問題
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
資料轉檔問題
價值 : 30 QP  點閱數:1203 回應數:13
樓主

力胖
初學者
212 86
1585 213
發送站內信

大家好:
我有寫轉檔程式,是把記事本的比較轉到資料庫裡面,動作是先比對資料庫是否有這筆資料,沒有的話就新增,有的話就更新,目前沒有做release sql支援的動作,在資料庫裡面的資料約十萬筆,然後程式轉完後,會做refresh的動作,如果資料夾還有資料就會再做轉檔的動作,目前所遇到的問題是網頁會不定期出現無回應的畫面,轉檔程式就會就此停住,我知道轉檔時間太久會timeout,但是出現網頁無回應,我要如何處理,我確認過網路沒有斷掉。

本篇文章發表於2011-10-06 22:57
1樓
不錯的參考

溫子
捐贈 VP 給 溫子 檢舉此回應
那就直接用 shell 執行 php 吧
本篇文章回覆於2011-10-07 08:53
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
最有價值解答

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
一般來說,最好還是不要利用網頁運行的方式來處理大容量或時間較長的資料動作。
除了會發生你說的timeout。也有機會發生其它的問題。如伺服器拒絕、瀏覽器本身的回應過長自動中斷....

如果真的很不得已的情況一定得要用網頁運行的方式來處理。那就最好是設計成步進式的方式。這樣就算中間發生了任何問題,也可以從中斷的地方開始不需要全部重來。

溫子建議的方式你可以參考一下,用SHELL的方式,會比用網頁運行還要安全。
本篇文章回覆於2011-10-07 09:36
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

kg
檢舉此回應
轉大量檔案時最好用shell來執行會比較好且節省資源....
本篇文章回覆於2011-10-07 18:34
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

力胖
檢舉此回應
我試著用php shell的方式執行,目前可以動作,想請問是否程式中不可以加header
我寫了一個測試程式:
test1.php


test2.php


會出現錯誤如下:
Warning: Cannot modify header information - headers already sent by (output star
ted at C:\AppServ\www\test1.php:2) in C:\AppServ\www\test1.php on line 3

本篇文章回覆於2011-10-09 19:17
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

小殘
檢舉此回應
header之前不能輸出東西
本篇文章回覆於2011-10-10 08:41
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

力胖
檢舉此回應
了解,我試了把echo那行拿掉就行了!
但是當我在cmd下執行了 php test1.php
並不會轉頁到test2.php
我的系統是在windows xp下的,
在使用php 的shell有需要再設定什麼嗎?
本篇文章回覆於2011-10-10 12:27
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

溫子
捐贈 VP 給 溫子 檢舉此回應
通常在規劃 shell 不會動用到 header,
畢竟這只是一個權宜方法處理長時間的過程,
處理一部分結束就該關閉執行,
並不是讓你一值無限執行下去...

本篇文章回覆於2011-10-10 13:21
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
作者回應

力胖
檢舉此回應
了解~~~~~因為前轉檔寫法是a.php-->b.php-->a.php用轉輪的方式轉檔,所以我才想說用成shell後也是使用這種方式!
本篇文章回覆於2011-10-10 14:37
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
不錯的參考

那顆爛蔥
捐贈 VP 給 那顆爛蔥 檢舉此回應
header是給瀏覽器看的
不是給php看的
本篇文章回覆於2011-10-11 01:22
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
回應

溫子
捐贈 VP 給 溫子 檢舉此回應
那你因該去查 a.php 帶參數的執行寫法...
例如:
寫一個 xx.bat 然後內容就是
php a.php 100
php a.php 150
本篇文章回覆於2011-10-11 08:55
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
作者回應

力胖
檢舉此回應
我沒說清楚不好意思,回溫大的話,a.php是1.txt的資料到資料表a裡面,b.php是轉2.txt到資料表b
所以原本的header並無帶參數,之前同仁會這樣子,應該是擔心server loading的問題,所以才會這麼寫,
而我遇到的問題,就像前面提到的,會有出現無法回應的問題,所以才想改變做法,請問各位大大,有什麼其他
的建議。
本篇文章回覆於2011-10-11 09:12
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
不錯的參考

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
要知道~~~當跑在SHELL下,你的header就已經可以說是無效了。另外再提示你一下。
包含JAVASCRIPT什麼的。都是無作用的。因為那些只能在瀏覽器下才會動作。

看你要的東西很像是想要變成轉頁的方式。也就是A處理完再轉去B處理。
先跟你說,這是不可能的事。在SHELL下,幾乎沒有任何方法可以做轉頁的動作。

如果是擔心可能負載會瞬間很大。可以自已加一些防護的方式。我個人是用microtime來判斷我的程序已經運行了多久了。
或是某個動作已經運行多久了。超過一定的時間就會自動跳掉。

也可以去試著用排程的方式去做。這樣就比較好控管。
本篇文章回覆於2011-10-11 09:32
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
13樓
回應

溫子
捐贈 VP 給 溫子 檢舉此回應
那就分兩次執行呀!!

a.txt & b.txt 是分別兩個資料表,可以不相干的處裡呀!!
本篇文章回覆於2011-10-11 10:58
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.