Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 99久久99久久精品国产片果冻,亚洲日本免费,亚洲综合在线观看视频

          整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          php調(diào)用python腳本將word轉(zhuǎn)為html代碼

          詳細(xì)]php調(diào)用python腳本,將word轉(zhuǎn)為html代碼及調(diào)用失敗處理

          起因:因?yàn)楣居龅桨l(fā)稿問(wèn)題,很多人喜歡用word編碼,然后再發(fā)布到網(wǎng)站上。PHP的包中雖然有部分可以使用的類庫(kù),但是對(duì)于圖片始終處理不好,我就想到了python。研究了下,python將word轉(zhuǎn)為html還真是方便。但是,怎么結(jié)合到服務(wù)器上呢?我們的服務(wù)器是用PHP開發(fā)的。

          1:python腳本

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

          2:php處理腳本

          public function uploadword(){        try {            $file = request()->file("file");            // 上傳到本地服務(wù)器            $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()]);        }    }

          上傳界面如下:

          實(shí)現(xiàn)的功能就是利用PHP的exec函數(shù),調(diào)用py腳本,將html代碼返回給前臺(tái)服務(wù)器。

          返回?cái)?shù)據(jù)如下

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

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

          在bash中0,1,2三個(gè)數(shù)字分代表STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO,即標(biāo)準(zhǔn)輸入(一般是鍵盤),標(biāo)準(zhǔn)輸出(一般是顯示屏,準(zhǔn)確的說(shuō)是用戶終端控制臺(tái)),標(biāo)準(zhǔn)錯(cuò)誤(出錯(cuò)信息輸出)。
          也可以通過(guò)以下方式將標(biāo)準(zhǔn)錯(cuò)誤重定向到標(biāo)準(zhǔn)輸出保存到$array中:
          打印之后,發(fā)現(xiàn)是沒有權(quán)限調(diào)用。于是就直接改為輸出了,也就是 py的print(html)函數(shù)。

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

          頭條創(chuàng)作挑戰(zhàn)賽#

          本文同步本人掘金平臺(tái)的原創(chuàng)翻譯:https://juejin.cn/post/6844904025305923592

          在上網(wǎng)的時(shí)候,收到任何的錯(cuò)誤碼都是讓人沮喪的體驗(yàn)。盡管我們已經(jīng)習(xí)慣于404頁(yè)面找不到,我們?cè)陧?yè)面迷失的時(shí)候,看到可愛的占位符來(lái)娛樂(lè)我們是很常見的事情了。但是有種更令人困惑的403錯(cuò)誤:禁止響應(yīng)。

          403意味著什么?

          簡(jiǎn)單來(lái)說(shuō):當(dāng)你發(fā)起請(qǐng)求的時(shí)候,服務(wù)端決定了你沒有權(quán)限訪問(wèn)。

          根據(jù)RFC 7231:

          403(禁止)狀態(tài)碼表明服務(wù)端已經(jīng)明白請(qǐng)求,但是拒絕授權(quán)...如果請(qǐng)求中提供了授權(quán)的身份認(rèn)證,服務(wù)端認(rèn)為它們不足以授予訪問(wèn)權(quán)限。

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

          如果你遇到這個(gè),這通常意味著你已經(jīng)通過(guò)服務(wù)器進(jìn)行了身份驗(yàn)證,比如你已經(jīng)登陸,但是你請(qǐng)求的資源希望某人具有更高的特權(quán)。

          最常見的,你作為一個(gè)普通用戶登陸系統(tǒng),但是你嘗試去獲取管理員(權(quán)限的)頁(yè)面。

          你怎么去解決它

          作為一個(gè)沒有訪問(wèn)服務(wù)器權(quán)限的用戶,你實(shí)際上只有幾種選擇:

          使用更適合的賬號(hào)進(jìn)行身份驗(yàn)證

          再者,根據(jù)RFC 7231

          如果請(qǐng)求中提供了身份驗(yàn)證憑據(jù),則服務(wù)器認(rèn)為它們不足以授予訪問(wèn)權(quán)限。客戶端不應(yīng)該使用相同的憑證重復(fù)請(qǐng)求。客戶端可以用新的或不同證書重復(fù)請(qǐng)求。

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

          如果你在一個(gè)站點(diǎn)上擁有多個(gè)賬號(hào),并且嘗試執(zhí)行通常可以訪問(wèn)的操作,但是這次被禁止這樣做了,那么你應(yīng)該嘗試此方法:使用你的其他賬號(hào)登陸

          你可能會(huì)發(fā)現(xiàn),此選項(xiàng)還需要清除緩存或Cookies,以防萬(wàn)一其他用戶登陸而導(dǎo)致刷新身份驗(yàn)證令牌失效。但是通常是不需要的操作。

          作為一個(gè)令人絕望的舉動(dòng),你還可以嘗試禁止可能會(huì)干擾你使用網(wǎng)站的瀏覽器擴(kuò)展插件。但是,這不太可能,因?yàn)?03表明你已經(jīng)通過(guò)身份驗(yàn)證,但是未獲得授權(quán)。

          譯者加:無(wú)法訪問(wèn)站點(diǎn),翻墻軟件也可能導(dǎo)致,請(qǐng)檢查是否關(guān)閉了代理軟件

          通知網(wǎng)站所有者:當(dāng)你想訪問(wèn)內(nèi)容時(shí)候返回了403

          如果你希望完全可以訪問(wèn)有問(wèn)題的資源,但是仍然看到此錯(cuò)誤,那么明智的做法就是讓網(wǎng)站背后的團(tuán)隊(duì)知道 - 這可能是他們的錯(cuò)誤

          再次引用RFC 7231:

          然而,可能由于與憑證無(wú)關(guān)的原因而禁止請(qǐng)求。

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

          他們可能有充分的理由在嚴(yán)格定義的參數(shù)之外阻止你的訪問(wèn),但是也可能是一個(gè)疏忽。

          放棄

          也許你不應(yīng)該能夠訪問(wèn)該資源。這種情況是會(huì)有的。這是一個(gè)龐大的互聯(lián)網(wǎng),可以合理地預(yù)期某些區(qū)域?qū)δ惚救耸菬o(wú)法進(jìn)入的。

          你可以通過(guò)http.cat站點(diǎn)來(lái)反省一下,為什么你的原始請(qǐng)求會(huì)被禁止

          .函數(shù)的返回值

          4.1return 語(yǔ)句

          有的時(shí)候,我們會(huì)希望函數(shù)將值返回給調(diào)用者,此時(shí)通過(guò)使用return語(yǔ)句就可以實(shí)現(xiàn)。

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

          利用函數(shù)求任意一個(gè)數(shù)組中的最大值

          • 求數(shù)組【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終止函數(shù)

          注意事項(xiàng):

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

          4.4函數(shù)沒有return返回undefined

          4.5 break,continue,return的區(qū)別

          • break :結(jié)束當(dāng)前的循環(huán)體(如for. while )
          • continue : 跳出本次循環(huán),繼續(xù)執(zhí)行下次循環(huán)(如for. while )
          • return : 不僅可以退出循環(huán),還能夠返回return語(yǔ)句中的值,同時(shí)還可以結(jié)束當(dāng)前的函數(shù)體內(nèi)的代碼

          主站蜘蛛池模板: 久久婷婷色综合一区二区| 福利一区二区三区视频在线观看| 日韩一区二区精品观看| 2021国产精品一区二区在线| 97久久精品午夜一区二区| 日韩免费视频一区二区| 成人精品一区二区三区校园激情 | 国产伦精品一区二区免费| 国产一区二区三区乱码| 无码一区二区波多野结衣播放搜索| 亚洲av高清在线观看一区二区| 国产在线一区二区| 武侠古典一区二区三区中文| 免费无码毛片一区二区APP| 国产一区二区三区手机在线观看| 精品一区二区三区免费| 亚洲国产一区二区视频网站| 日韩精品一区二区三区老鸭窝| 久久一区二区三区99| 国产suv精品一区二区6| 亚洲乱色熟女一区二区三区蜜臀| 国产精品无码AV一区二区三区| 一区二区网站在线观看| 成人丝袜激情一区二区| 中文字幕日韩丝袜一区| 国产精品一区二区久久不卡| 亚洲一区二区三区乱码A| 日本v片免费一区二区三区| 亚洲中文字幕乱码一区| 国产在线乱子伦一区二区| 国精品无码一区二区三区在线蜜臀 | 日产一区日产2区| 日韩社区一区二区三区| 波多野结衣AV一区二区三区中文| 久久久久成人精品一区二区| 中文字幕一区日韩在线视频 | 日韩一区二区三区无码影院| 亚洲一区二区三区在线观看精品中文| 久久久精品日本一区二区三区 | 精品国产免费观看一区| 中文字幕一区二区三匹|