起因:因為公司遇到發稿問題,很多人喜歡用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錯誤:禁止響應。
簡單來說:當你發起請求的時候,服務端決定了你沒有權限訪問。
根據RFC 7231:
403(禁止)狀態碼表明服務端已經明白請求,但是拒絕授權...如果請求中提供了授權的身份認證,服務端認為它們不足以授予訪問權限。
403響應是屬于客戶端錯誤4xx范圍的HTTP響應。這意味著你或者你的瀏覽器做錯了什么。
如果你遇到這個,這通常意味著你已經通過服務器進行了身份驗證,比如你已經登陸,但是你請求的資源希望某人具有更高的特權。
最常見的,你作為一個普通用戶登陸系統,但是你嘗試去獲取管理員(權限的)頁面。
作為一個沒有訪問服務器權限的用戶,你實際上只有幾種選擇:
再者,根據RFC 7231
如果請求中提供了身份驗證憑據,則服務器認為它們不足以授予訪問權限。客戶端不應該使用相同的憑證重復請求。客戶端可以用新的或不同證書重復請求。
這是唯一使你立刻擁有解決此問題能力的解決方案。
如果你在一個站點上擁有多個賬號,并且嘗試執行通常可以訪問的操作,但是這次被禁止這樣做了,那么你應該嘗試此方法:使用你的其他賬號登陸。
你可能會發現,此選項還需要清除緩存或Cookies,以防萬一其他用戶登陸而導致刷新身份驗證令牌失效。但是通常是不需要的操作。
作為一個令人絕望的舉動,你還可以嘗試禁止可能會干擾你使用網站的瀏覽器擴展插件。但是,這不太可能,因為403表明你已經通過身份驗證,但是未獲得授權。
譯者加:無法訪問站點,翻墻軟件也可能導致,請檢查是否關閉了代理軟件
如果你希望完全可以訪問有問題的資源,但是仍然看到此錯誤,那么明智的做法就是讓網站背后的團隊知道 - 這可能是他們的錯誤。
再次引用RFC 7231:
然而,可能由于與憑證無關的原因而禁止請求。
造成這種情況意外發生的常見原因可能是服務器使用特定IP地址或地理區域允許列表或拒絕列表(名單)。
他們可能有充分的理由在嚴格定義的參數之外阻止你的訪問,但是也可能是一個疏忽。
也許你不應該能夠訪問該資源。這種情況是會有的。這是一個龐大的互聯網,可以合理地預期某些區域對你本人是無法進入的。
你可以通過http.cat站點來反省一下,為什么你的原始請求會被禁止
.函數的返回值
4.1return 語句
有的時候,我們會希望函數將值返回給調用者,此時通過使用return語句就可以實現。
<script>
function getResult(){
return 666;
}
// getResult();
console.log(getResult());
</script>
利用函數求任意一個數組中的最大值
<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的區別
*請認真填寫需求信息,我們會在24小時內與您取得聯系。