Golang vs PHP 之文件服务器
source link: https://studygolang.com/articles/13658?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
前面的话
作者为golang脑残粉,本篇内容可能会引起phper不适,请慎读!
前两天有同事遇到一个问题,需要一个能支持上传、下载功能的HTTP服务器做一个数据中心。我刚好弄过,于是答应帮他搭一个。
HTTP服务器,首先想到的就是PHP + nginx。于是开撸,先写一个PHP的上传
<?php if ($_FILES["file"]["error"] > 0) { echo "错误:: " . $_FILES["file"]["error"] . "<br>"; } else { if (file_exists("upload/" . $_FILES["file"]["name"])) { echo $_FILES["file"]["name"] . " 文件已经存在。 "; } else { move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); echo "文件存储在: " . "upload/" . $_FILES["file"]["name"]; } } ?>
好了,写好了!需求完成了!测试一下把!
于是开始第一次测试,结果:失败!
原因是PHP的upload_max_filesize只有2M,上传的文件大小超过限制了。
修改了一下php.ini配置,再次测试可以上传了
那么部署到服务器上去把。服务器上有一个openresty(nginx的系列的web服务器),把upload.php文件丢里面,然后重启服务。好了,又可以测试一下了!
于是第二次测试,结果:失败!
原因是,openresty默认没开php解析,要改下配置。把nginx.conf里的php解析打开一下。重启nginx,然后再测试一下吧~
于是,第三次测试,还是失败!
原来。。这台机器上,虽然有nginx,但是没有安装PHP!!! 想到还要去外网下载PHP,然后还要选版本,然后回来安装还要配置环境变量以及openresty关联php的配置后。。
算了,再见吧 PHP!
轮到Go语言上场的时候了!!
在golang的世界里1行代码就能搞定一个文件服务器
package main import ( "log" "net/http" ) func main() { log.Fatal(http.ListenAndServe(":8038", http.FileServer(http.Dir("./")))) }
就这样,你就可以在本机访问8038端口去下载指定路径的文件了!不需要依赖nginx或者其他任何web服务器
包含上传、下载功能的FileServer.go全部代码如下
package main import ( "fmt" "io" "log" "net/http" "os" ) const ( uploadPath = "./Files/" ) func main() { http.HandleFunc("/upload", uploadHandle) fs := http.FileServer(http.Dir(uploadPath)) http.Handle("/Files/", http.StripPrefix("/Files", fs)) log.Fatal(http.ListenAndServe(":8037", nil)) } func uploadHandle(w http.ResponseWriter, r *http.Request) { file, head, err := r.FormFile("file") if err != nil { fmt.Println(err) return } defer file.Close() filePath := uploadPath + head.Filename fW, err := os.Create(filePath) if err != nil { fmt.Println("文件创建失败") return } defer fW.Close() _, err = io.Copy(fW, file) if err != nil { fmt.Println("文件保存失败") return } io.WriteString(w, "save to "+filePath) }
如何部署
go是静态编译型语言,直接编译出可执行文件,在windows上也就是exe。放到任何一台机器上,不需要安装额外环境,就能直接运行!
所以编译出FileServer.exe文件,丢到服务器机子上执行。
继续测试!结果: 成功,稳!
Recommend
-
5
BOM PHP文件迁移到LINUX服务器,BOM在捣乱
-
4
利用docker在服务器运行多个版本php php7已经出来好一段时间了,众所周知它对性能的提升很大。现在假设我们有台比较老的服务器,...
-
2
采用PHP实现"服务器推"技术的聊天室 本文地址: https://www.laruence.com/2008/04/16/118.html 转载请注明出处
-
5
PHP 仍然是最流行的服务器端编程语言 WinterIsComing (31822)发表于 2021年09月15...
-
4
今天 W3Techs 发布了一份历年来服务器端编程语言使用趋势报告,报告显示近十年来各项编程语言在服务端的使用情况,其中 PHP 在份额上牢牢占据榜首的位置,并且一直保持比较大的优势。
-
14
本文讲从Golang 的文件服务器说起,接着探究sendfile 系统调用是什么,最后总结下零拷贝的使用场景。 构建一个文件服务器在Golang 中,如何构建一个零拷贝的文件服务器呢,如下是全部代码: package mainimport "net/ht...
-
4
PHP程序如何发送syslog到远程服务器 2021-10-28 2 分钟阅读 给同事做了个 PHP 接口,转发发送短信的请求,同时要把发送记录发送到远程的 cacti 的 syslog 去 很简单,但是也不简单 首先是 PHP 服务器,是最简...
-
6
官网地址: SW-X框架-专注高性能便捷开发而生的PHP-SwooleX框架希望各大佬举起小手,给小弟一个star:...
-
4
首页技术宅WordPressWordPress搭建 PHP版本及服务器配置要求WordPres...
-
1
Ununtu服务器安装Nginx与PHP 1. 安装Nginx: sudo apt update sudo apt install nginx 验证结果,使用命令: sudo systemctl status nginx
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK