PHP使用Azure Storage Blob上傳檔案

來源:互聯網
上載者:User
這篇文章主要介紹了關於PHP使用Azure Storage Blob上傳檔案,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

前言

分配到一個項目,一個需要內容管理的小站,前端頁面展示與特效由前端同事完成。我負責搭建內容管理後台以及提供資料介面。這個項目裡需要管理端能夠上傳視頻,但是甲方提供的伺服器頻寬非常迷你,而且同一個伺服器上還有其他項目並行。
為了防止突發升級帶來的後續影響,組長建議我學習使用Azure Storage Blob,並隨時做好升級準備。

PHP版本限制

在Github裡找到了官方提供的sdk。

Minimum Requirements

PHP 5.6 or above

由於本地配置的PHP環境是5.5.12,而sdk需要的最低php版本為5.6,composer阻止了更新
於是使用composer update --ignore-platform-reqs繞過需求監測強升。
然而類BlobResources.php中將const設為數組,在5.5中會報錯

Fatal error: Arrays are not allowed in class constants in E:\webroot\tp5cms\vendor\microsoft\azure-storage-blob\src\Blob\Internal\BlobResources.php on line 103

沒辦法只能升級PHP。

升級WAMP 2.5-3.1

為了開發需要,決定將wampserver提升至最新版本。
升級wamp有個技巧:不能直接覆蓋安裝,要先去掉老版本再安裝新版本。
仔細閱讀升級提示。
總結一下需要做的大概是如下兩件事:

  • 移除服務

    Start WampServer
    【重要】登入MySQL備份所有資料庫資料
    wampmanager -> Stop all Services
    wampmanager -> MySQL -> Service -> Remove service 移除MySQL服務
    wampmanager -> Apache -> Service -> Remove service 移除Apache服務
    stop wampmanager
    右擊 wampmanager -> Exit

  • 重新命名檔案夾

    將wamp命名為其他名字以作備份

安裝儲存模擬器

由於公司內沒有用於測試的azure帳號,幸好azure有用於測試開發的儲存模擬器。Windows系統可以直接下載安裝,Linux系統可以使用開源儲存模擬器Azurite。

  1. 下載模擬器,此處有下載連結。

  2. 安裝完成後運行StartStorageEmulator.cmd發現提示需要安裝SQL Server Express Local DB,在此處有下載連結。選擇Express Edition,進入後選擇LocalDB下載並安裝。

  3. 再次運行cmd發現錯誤

C:\Program Files (x86)\Microsoft SDKs\Azure\Storage Emulator>AzureStorageEmulator.exe startWindows Azure Storage Emulator 5.3.0.0 command line tool 未處理的例外狀況: System.TimeoutException: Unable to open wait handle.在 Microsoft.WindowsAzure.Storage.Emulator.Controller.EmulatorProcessController.InternalWaitForStorageEmulator(Int32 timeoutInMilliseconds)在 Microsoft.WindowsAzure.Storage.Emulator.Controller.EmulatorProcessController.EnsureRunning(Int32 timeoutInMilliseconds)在 Microsoft.WindowsAzure.Storage.Emulator.Commands.StartCommand.RunCommand() 在 Microsoft.WindowsAzure.Storage.Emulator.Program.Main(String[] args)

經過查詢後發現這是因為有進程佔用了10000號連接埠。

#運行:>C:\Users\Walter>netstat -p tcp -ano | findstr :10000> TCP 127.0.0.1:10000 0.0.0.0:0 LISTENING 2664 #根據PID 2664查詢對應的進程>C:\Users\Walter>tasklist | findstr "2664">YunDetectService.exe 2664 Console 1 9,944 K #只是一個不重要的進程,去掉後繼續開發>C:\Users\Walter>taskkill /pid 2664 /f>成功: 已終止 PID 為 2664 的進程。 #以下是模擬器成功啟動並執行範例>C:\Program Files (x86)\Microsoft SDKs\Azure\Storage Emulator>AzureStorageEmulator.exe startWindows Azure Storage Emulator 5.3.0.0 command line toolThe storage emulator was successfully started. >C:\Program Files (x86)\Microsoft SDKs\Azure\Storage Emulator>AzureStorageEmulator.exe statusWindows Azure Storage Emulator 5.3.0.0 command line toolIsRunning: TrueBlobEndpoint: http://127.0.0.1:10000/QueueEndpoint: http://127.0.0.1:10001/TableEndpoint: http://127.0.0.1:10002/

開始開發

通過官方的例子可以嘗試新增container,blob及刪除功能。
成功上傳blob後,卻無法對儲存模擬器中的資源進行定址。
eg.使用的帳戶名稱devstoreaccount1,建立的容器名mycontainerudfpbk,blob名5ac1a5c82021d.png
根據文檔中的規則,資源地址應為
http://127.0.0.1:10000/devstoreaccount1/mycontainerudfpbk/5ac1a5c82021d.png
但是返回資料一直是

<Error>  <Code>ResourceNotFound</Code>  <Message>    The specified resource does not exist. RequestId:9d2d1b08-12b1-4feb-8636-4325eb71b838 Time:2018-04-08T09:14:14.3007800Z  </Message></Error>

根據閱讀相關文章後發現原來在建立容器時,若沒有設定過存取權限(container-level access policies),則預設為禁止外部存取。

ACL(PublicAccessType)許可權分為三等CONTAINER_AND_BLOBSBLOBS_ONLYNONE,預設是NONE
若資源需要外部能夠訪問則設定為BLOBS_ONLY即可。
附上自己封裝的azure輔助類

這中間還遇到一個小問題,在設許可權時,ACLBase報了個錯
Static function MicrosoftAzure\Storage\Common\Internal\ACLBase::createAccessPolicy() should not be abstract
經過查詢後發現,在PHP5.2以後不允許abstract和static同時使用在方法上。

#只要將ACLBase中的abstract protected static function createAccessPolicy();abstract protected static function validateResourceType($resourceType);#改為protected static function createAccessPolicy(){}protected static function validateResourceType($resourceType){}#即可

總結

中止進程的三個方法

  1. 利用pid結束進程
    taskkill /pid PID /f

  2. 利用pid結束進程
    ntsd -c q -p PID

  3. 利用進程名結束進程
    ntsd -c q -pn NAME.exe

地址

  1. 官方提供的sdk地址

  2. 自用輔助類地址

註:強制結束前先明確這個進程的作用

以上就是本文的全部內容,希望對大家的學習有所協助,更多相關內容請關注topic.alibabacloud.com!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.