起因:因为公司遇到发稿问题,很多人喜欢用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小时内与您取得联系。