天天看點

都是權限惹的禍!

   最近一直忙的做公司的項目,很少來這裡發東西了,對不起大家了,随着,項目的結束,終于可以在這裡吐槽了!

公司的項目其實說白了,就是想實作類似百度文庫或其他文庫類似的功能,供公司内部技術人員和銷售人員來使用的,和文庫類項目唯一不同的地方就是,就是多文檔的同時上傳。廢話少說,直接上菜。

技術方面使用了如下的技術,PHP,uploadify,flashpaper,swftools,fleapaper,ADODB等技術。upuploadify的資料這裡就不介紹了,簡單的說一下,來自國外的一款優秀jQuery插件,主要功能是批量上傳檔案,它的使用說簡單也簡單,說複雜也複雜,我遇到的唯一的難點就是如何使用表單給後端傳參數,這裡,通過度娘查了很多的資料,但沒有發現一個有用的,大多數的資料用的都是老的版本,是以,沒什麼參考價值,隻有一個www.pooy.net/這個部落格還有點參考價值。有很多關于這個插件的用法也是在這裡了解到的,推薦小白們有時間去這裡看看。

我實作的是批量上傳,并同時入庫的功能,資料庫的接口選擇了adodb,開發的時候出了洋相,居然,多檔案上傳成功但沒有入庫,後來,檢查居然是路徑的問題,害死人啊!其次,就是上傳中文目錄和中文檔案名的錯誤,進行了多次的轉換,核心技術其實就是iconv,搞得我有點暈,不時要檢查中英文的情況,是以,還是希望php的以後的版本能早點實作unicode的功能。傳遞參數其實使用的是$_POST。

說完了批量上傳,下面就要說道重點了,文檔的轉換,其實,也主要是實作以下文檔的轉換,word轉pdf,pdf轉swf,或其它文檔轉成上面提到的幾個辦法。通過搜尋,發現大部分使用的是flashpaper這個,我一開始也是選擇了這個,使用的方法也非常的簡單,安裝該軟體,然後,預設為列印機,使用指令行參數對上傳的檔案進行相應的轉換工作,那麼,在PHP中,則使用系統執行函數執行相應的操作即可實作。

但問題偏偏出在php執行系統函數的上面了,其實,在php中執行系統函數非常簡單,一個system,或exec就可以了,好了,開工,測試,沒有出現相應的結果。難道是指令行語句有錯嗎?在cmd下運作,沒有問題,說明不是軟體的問題,難道,系統執行函數有錯,用系統函數執行系統指令,見鬼了,居然有動靜了。經過反複的測試,發現,隻要是實作系統的指令,程式完美運作,隻要一執行使用者指令,程式沒有反應。忘了,說了,我使用的apache+PHP的配置,IIS+PHP的環境,暫時對這個不感冒!總覺得配起來太麻煩。但不見得就不好啊,我隻是犯懶了。

開始網上的搜尋,大部分都是扯蛋的文章,沒有發現一個有用的資料。沒辦法隻能自己想辦法,在這個項目開始以前,曾經在xampp環境下執行成功過一次,而由于xampp裝上後占的硬碟太大,就換成了upupw了,該環境進行了的大量的優化組合,是以就果斷的從xampp換成了upupw了,對了,其實是想用nginx組合的,但由于沒有時間研究apache下的轉換規則,就暫時放棄了,有時間再看看。廢話少說,重新安裝xampp,然後,在運作,居然。。。。。。。,活見鬼了,這2個環境沒有大的差別啊,隻是一個是系統服務運作,一個是單獨運作。于是,把這個現象和upupw的作者做了回報,他也表示不解,他對比了兩個環境的配置檔案,得出的結論是沒有差別,于是,懷疑到是不是系統權限的問題啊,由于,執行系統指令,需要管理者權限并有完全控制功能,但我也查了。系統預設的就是管理者權限并有相應的規則。暈死,那就隻能檢查系統程序了,看看到底這2個系統後面發生了什麼,打開任務管理器,看下面的截圖:

都是權限惹的禍!

居然發現,由于upupw使用的是系統服務運作的方式,它的使用者名居然是system,而xampp沒使用系統服務方式,它的使用者名居然是administartor,不信這個邪,我把xampp也改成了系統服務方式,upupw由于無法更改選項,隻能在系統服務欄中,把執行的使用者名改成administator,活見鬼了,居然是xampp也不出結果了,upupw出結果。是以,最後的結論是原來是權限惹得禍。按理說不應該了,網上說的system的權限應該大于administartor的權限,有知道的人麻煩解釋一下。

是以,當你想執行相應的系統級指令的時候,麻煩你檢查下相應的權限。也許,就是因為這個權限會害你浪費了很多的時間和精力。大部分的人,由于不涉及到底層的應用,是以很容易的忽略這類問題。

功能是實作了,但效率也看出來了,由于flashpaper會發生其它比如死鎖的現象,是以,有人建議不使用。由于,我們是在内部使用,是以不存在這個問題。為了解決上述問題,我也研究了fleapaper技術,但它使用的是把pdf轉成swf,使用了seftool工具,這不是廢話嗎?要是上傳了pdf,我才不用那個flashpriner呢?現在網上把pdf轉成其它檔案的我差不多都研究過。但沒有發現有指令行接口的工具,如果有的話,會省很多時間的。有個7d-pdfmaker提供了指令行工具,它的圖形界面勢需要錢的,而指令行接口是免費的。但它對word文檔要求比較嚴,我使用它轉換word文檔,居然,丢失目錄格式。我也試過,其它的,什麼com接口,調用wps等,使用python等等,但是不管使用那個方法,如果你的權限不對,什麼都是白搭。

最後,還發現一個奇怪的現象,就是當你重新換系統後,即使,權限設定了,居然也不能實作相應的功能,你知道是為什麼嗎?

都是權限惹的禍!

這個地方,你隻要隐藏了已知檔案類型的擴充名,就憑你是神仙也沒轍。是以,這樣的細節,還是要注意的好!

好了,收工!