2018年5月16日 星期三

php 的 $_SESSION 失效的處理方式


由於資訊安全考量的緣故,Web Server 被設定為比較安全的環境,造成 php 的 $_SESSION 失效,試了很多方式測試,$_SESSION 是啟動的,但是它的值就是無法傳遞到下一個頁面!
後來參考以下二個頁面: link 1, link 2
總算知道原因,並且解決了~~

第一部份,
先確認 /var/lib/php/session/ 目錄的權限是否正確?
通常都沒有問題!
再來確認 /var/lib/php/session/ 裡,有沒有你使用 $_SESSION 產生的暫存檔?
由於檔名是亂數編的,從檔案名稱看不出來,可能只能從檔案的日期找出最新的,看看它的檔案內容,如果有存在你所儲存的值,表示這部份沒有問題了。
值可以存進去,但是提不出來!

第二部份
用 phpinfo() 檢查 session.use_trans_sid 的值是否為 0。
若為 0 ,問題就找到了! 設為 0 的意思是,每一個 url 都為生成一個 session,其他的頁面也會生成新的 session,而造成無法追蹤前一個頁面的狀況。
也有二個解決方式,一個是修改 php.ini 的檔案,將它改為 1。 另一個,則是修改 php 頁面,在 session_start() 之前,先加上  session_id(SID) 敘述,就可以了。例如:
    session_id(SID);
    session_start();


2018年5月14日 星期一

android app 的資料備份

開發 app 時,常會寫入一些資料做些收集、檢測的工作,實體手機有權限的限制,寫入在 app 的 private data 時,資料的備份是一個麻煩事。
以下方式可以處理~

from:
https://stackoverflow.com/questions/15558353/how-can-one-pull-the-private-data-of-ones-own-android-app

從 android 手機要備份資料,用 adb 可能會用以下方式:
adb pull /data/data/com.corp.appName/files/myFile.txt myFile.txt
 
對於 android virtual device 可能可以,但對實體手機可能會產生錯誤,它不讓我們複製。 
 
先離題一下,連線到實體手機時,以下指令可以進入到 app 的目錄裡,可以看到相關檔案,但無法複製。 
adb shell
run-as com.example.appName 

回題,要複製 app 的資料方式,要用備份的概念來做,指令如下:
adb backup  -f myFiles com.example.appName 

這個指令執行時,為了安全考量,手機上會顯示是否允許備份的動作,所以,必須在手機上配合操作才能允許備份某個 app 的資料。 
其中,myFiles 是備份出來的檔案,這個檔案是有壓縮的。
解開的方式如下:
dd if=myFiles bs=4K iflag=skip_bytes skip=24 | openssl zlib -d > myFiles.tar
 
如果上面這個指令產生 zlib 的錯誤,我用以下方式可以解開壓縮檔,成為 tar 的檔案。
dd if=myFiles bs=4K iflag=skip_bytes skip=24 | zlib-flate -uncompress > myFiles.tar 

再用 tar xf myFiles.tar 方式解開就完成了。 
 
2020.12.02 更新
ref: https://stackoverflow.com/questions/29830981/error-zlib-is-an-invalid-command
如果出現 zlib 或 flate 錯誤,可以用底下方式,用 python 來解決~ 
dd if=myFiles bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" | tar -xvf -

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

討論串的下方還有幾種方式,我沒試,也許簡單些~ 
 
方式1 
$ adb shell
$ run-as {app-package-name}
$ cd /data/data/{app-package-name}
$ chmod 777 {file}
$ cp {file} /mnt/sdcard/
再回到 linux 將檔案複製出來
$ adb pull /mnt/sdcard/{file}
 
方式2
adb -d shell "run-as com.example.test cat /data/data/com.example.test/databases/data.db" > data.db
直接用 print 的方式將檔案 dump 到 linux 的檔案裡。 
 
  

2018年5月3日 星期四

Photogrammetry 的資料整理


因為專案因素,就記錄一下~~ 

系統需求: 準備一張支援 CUDA 的 NVIDIA 顯示卡,才能跑出結果。 很重要!

使用 COLMAP + Meshlab

COLMAP 相關文件:
官方網站
Free photogrammetry software review: 2017
Lab Notes: A recipe for using photogrammetry to create 3D model
Photogrammetry Testing 8: COLMAP


wikipedia 的比較: Comparison of photogrammetry software


另外,協同編輯(共寫)的功能,有以下幾篇可以參考:
Collaborative Editing in JavaScript: An Intro to Operational Transformation
PHPWebSocket-TinyMCE