整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          php調用python腳本將word轉為html代碼

          詳細]php調用python腳本,將word轉為html代碼及調用失敗處理

          起因:因為公司遇到發稿問題,很多人喜歡用word編碼,然后再發布到網站上。PHP的包中雖然有部分可以使用的類庫,但是對于圖片始終處理不好,我就想到了python。研究了下,python將word轉為html還真是方便。但是,怎么結合到服務器上呢?我們的服務器是用PHP開發的。

          1:python腳本

          #!/usr/bin/python# -*- coding: UTF-8 -*-import sysfrom pydocx import PyDocXreload(sys)sys.setdefaultencoding('utf8')FileName = sys.argv[1] #獲取文件名參數ShortName = sys.argv[2] #獲取文件名參數html = PyDocX.to_html(FileName) # f = open("/www/wwwroot/micuer.com/pythoncode/runtime/99.txt", 'w') #服務器的全路徑# f.write(html)# f.close()print(html)

          2:php處理腳本

          public function uploadword(){        try {            $file = request()->file("file");            // 上傳到本地服務器            $savename = \think\facade\Filesystem::disk('upload')->putFile( 'word', $file);            $shotrname = time().".txt"; // 短名稱            $savename = "/www/wwwroot/micuer.com/data/upload/".$savename; //Request::domain().            $python_file_name = "/www/wwwroot/micuer.com/pythoncode/WordToHtml.py";            //組裝命令            $cmd = "python {$python_file_name} ".$savename." {$shotrname}  2>error.txt 2>&1";            $res = exec($cmd,$array, $ret);            return json(["code"=>200,"msg"=>"成功","data"=>$savename,"cmd"=>$cmd,"array"=>$array]);        } catch (think\exception\ValidateException $e) {            return json(["code"=>40000,"msg"=>$e->getMessage()]);        }    }

          上傳界面如下:

          實現的功能就是利用PHP的exec函數,調用py腳本,將html代碼返回給前臺服務器。

          返回數據如下

          其實,再處理這個方案中,也遇到了很多問題,比如在命令行下只能成功,但是exec函數執行不成功等等。
          參考了資料:https://my.oschina.net/u/4427610/blog/3155816
          也就是

          exec("python python_test.py 2>error.txt 2>&1", $array, $ret);

          在bash中0,1,2三個數字分代表STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO,即標準輸入(一般是鍵盤),標準輸出(一般是顯示屏,準確的說是用戶終端控制臺),標準錯誤(出錯信息輸出)。
          也可以通過以下方式將標準錯誤重定向到標準輸出保存到$array中:
          打印之后,發現是沒有權限調用。于是就直接改為輸出了,也就是 py的print(html)函數。

          注意幾點:
          1:執行權限問題
          2:exec(“python python_test.py 2>error.txt 2>&1”, $array, $ret); 中 $array就接受到了 print(html)的值
          3:各個腳本盡量使用全路徑

          頭條創作挑戰賽#

          本文同步本人掘金平臺的原創翻譯:https://juejin.cn/post/6844904025305923592

          在上網的時候,收到任何的錯誤碼都是讓人沮喪的體驗。盡管我們已經習慣于404頁面找不到,我們在頁面迷失的時候,看到可愛的占位符來娛樂我們是很常見的事情了。但是有種更令人困惑的403錯誤:禁止響應。

          403意味著什么?

          簡單來說:當你發起請求的時候,服務端決定了你沒有權限訪問。

          根據RFC 7231:

          403(禁止)狀態碼表明服務端已經明白請求,但是拒絕授權...如果請求中提供了授權的身份認證,服務端認為它們不足以授予訪問權限。

          403響應是屬于客戶端錯誤4xx范圍的HTTP響應。這意味著你或者你的瀏覽器做錯了什么。

          如果你遇到這個,這通常意味著你已經通過服務器進行了身份驗證,比如你已經登陸,但是你請求的資源希望某人具有更高的特權。

          最常見的,你作為一個普通用戶登陸系統,但是你嘗試去獲取管理員(權限的)頁面。

          你怎么去解決它

          作為一個沒有訪問服務器權限的用戶,你實際上只有幾種選擇:

          使用更適合的賬號進行身份驗證

          再者,根據RFC 7231

          如果請求中提供了身份驗證憑據,則服務器認為它們不足以授予訪問權限。客戶端不應該使用相同的憑證重復請求。客戶端可以用新的或不同證書重復請求。

          這是唯一使你立刻擁有解決此問題能力的解決方案。

          如果你在一個站點上擁有多個賬號,并且嘗試執行通常可以訪問的操作,但是這次被禁止這樣做了,那么你應該嘗試此方法:使用你的其他賬號登陸

          你可能會發現,此選項還需要清除緩存或Cookies,以防萬一其他用戶登陸而導致刷新身份驗證令牌失效。但是通常是不需要的操作。

          作為一個令人絕望的舉動,你還可以嘗試禁止可能會干擾你使用網站的瀏覽器擴展插件。但是,這不太可能,因為403表明你已經通過身份驗證,但是未獲得授權。

          譯者加:無法訪問站點,翻墻軟件也可能導致,請檢查是否關閉了代理軟件

          通知網站所有者:當你想訪問內容時候返回了403

          如果你希望完全可以訪問有問題的資源,但是仍然看到此錯誤,那么明智的做法就是讓網站背后的團隊知道 - 這可能是他們的錯誤

          再次引用RFC 7231:

          然而,可能由于與憑證無關的原因而禁止請求。

          造成這種情況意外發生的常見原因可能是服務器使用特定IP地址或地理區域允許列表或拒絕列表(名單)。

          他們可能有充分的理由在嚴格定義的參數之外阻止你的訪問,但是也可能是一個疏忽。

          放棄

          也許你不應該能夠訪問該資源。這種情況是會有的。這是一個龐大的互聯網,可以合理地預期某些區域對你本人是無法進入的。

          你可以通過http.cat站點來反省一下,為什么你的原始請求會被禁止

          .函數的返回值

          4.1return 語句

          有的時候,我們會希望函數將值返回給調用者,此時通過使用return語句就可以實現。

          <script>
                  function getResult(){
                      return 666;
                  }
                  // getResult();
                  console.log(getResult());
              </script>

          利用函數求任意一個數組中的最大值

          • 求數組【5,2,99,101,67,77】中的最大值
          <script>
                  function getArrMax(arr){
                      var max = arr[0];
                      for(var i=1;i<=arr.length;i++){
                          if(arr[i]>max){
                              max=arr[i];
                          }
                      }
                      return max;
                  }
                  var re = getArrMax([5,2,99,101,167,77]);
                  console.log(re);
              </script>

          4.2return終止函數

          注意事項:

           <script>
                  //1.return終值函數
                  function getSum(num1,num2){
                      return num1 + num2; //return 后面的代碼不會被執行
                      alert('我不會被執行')
                  }
                  console.log(getSum(1,2));
                  //2.return 只能返回一個值
                  function fn(num1,num2){
                      return num1,num2;   //返回的結果最后一個值
                  }
                  console.log(fn(1,2));
                  //3.我們求任意兩個數的  加減乘除結果
                  function getResule(num1,num2){
                      return [num1+num2,num1-num2,num*num2,num1/num2];
                  }
                  var re =getResule(1,2); //返回的是一個數組
                  console.log(re);
              </script>

          4.4函數沒有return返回undefined

          4.5 break,continue,return的區別

          • break :結束當前的循環體(如for. while )
          • continue : 跳出本次循環,繼續執行下次循環(如for. while )
          • return : 不僅可以退出循環,還能夠返回return語句中的值,同時還可以結束當前的函數體內的代碼

          主站蜘蛛池模板: 无人码一区二区三区视频| 亚洲AV无码片一区二区三区 | 精品日本一区二区三区在线观看| 国产AV午夜精品一区二区三| 成人免费视频一区| 亚洲电影国产一区| 久久亚洲色一区二区三区| 精品无码国产一区二区三区麻豆| 国产在线一区二区三区| 中文字幕一区二区区免| 国产一区二区在线观看麻豆| 天堂Av无码Av一区二区三区| 香蕉久久一区二区不卡无毒影院| 国产亚洲情侣一区二区无| 精品女同一区二区三区在线 | 在线播放国产一区二区三区| 制服中文字幕一区二区| 精品日韩在线视频一区二区三区| 国产精品亚洲一区二区无码 | 一区二区三区电影在线观看| 无码喷水一区二区浪潮AV| 无码人妻啪啪一区二区| 精品午夜福利无人区乱码一区| 国产精品视频一区二区噜噜| 精品亚洲综合在线第一区| 国产一区二区三区免费| 风间由美性色一区二区三区 | 国精品无码一区二区三区左线| 一区二区三区视频观看| 中文字幕久久亚洲一区 | 精品国产福利在线观看一区| 国产成人精品视频一区| 无码精品人妻一区二区三区影院| 一区二区三区精品高清视频免费在线播放 | 精品视频一区在线观看| 一区二区三区免费在线视频 | 国产激情无码一区二区| 无码精品一区二区三区免费视频 | 精品一区二区三区四区在线| 中文字幕aⅴ人妻一区二区 | 亚欧成人中文字幕一区|