拿出主機板模組,看它風扇的貼紙是,「 EVERCOOL,EC4010M12ER,EL BEARING,DC 12V」。嗯,你想找個便宜的 CPU 風扇換上去,就解決問題了嗎? 沒這回事,請看下面的討論
https://forum.synology.com/enu/viewtopic.php?t=59568
.devtools-monospace {
font-family: "Noto Sans Mono CJK TC" !important;
font-size: 16px !important;
}
<Files dl_video*>
<IfModule mod_xsendfile.c>
# 啟用 xsendfile
XSendFile On
SetEnv MOD_X_SENDFILE_ENABLED 1
</IfModule>
<IfModule mod_limitipconn.c>
# 限制每一IP同時連線的數目
MaxConnPerIP 8
</IfModule>
<IfModule mod_ratelimit.c>
# 限制下載速率 850KB/s
SetOutputFilter RATE_LIMIT
SetEnv rate-limit 850
</IfModule>
</Files>PHP 的程式長得像下面這樣,只要設定 header,就會轉由 Apache 控制下載。
// 權限檢查 .....
// 檔案檢查 .....
// .....
header("X-Sendfile: {$fullname}");
header("Content-type: application/octet-stream");
header('Content-Disposition: attachment; filename="' . basename($fname) . '"');注意,$fullname 是檔案系統中的實際目錄名稱,例如
/var/www/html/mp4_files/105S101.mp4原先的環境是使用 CentOS,但其已於數年前被宣告死亡,只能再找其他途徑。使用 docker.hub 的 PHP 官方 image -- php:7.4.33-apache-bullseye,bullseye 為 Debian 當前的舊的穩定(oldstable)版。
Debian 官方沒有 mod_limitipconn,必須自己下載編譯安裝。變通的方式,是在 docker 中編譯好,把用到的檔案 copy 出來。
apt install apache2-dev wget
wget https://dominia.org/djao/limit/mod_limitipconn-0.24.tar.bz2
tar -xvf mod_limitipconn-0.24.tar.bz2
cd mod_limitipconn-0.24
make
make install
--
## 需要的檔案是下面兩個
/usr/lib/apache2/modules/mod_limitipconn.so
/etc/apache2/mods-available/limitipconn.loadDockerfile 如下。
# Debian 當前的舊的穩定(oldstable)版
FROM php:7.4.33-apache-bullseye
# Install required extensions
# libicu-dev -- required by php ext: intl
# libpq-dev -- required by php ext: pgsql pdo_pgsql
# libonig-dev -- required by php ext: mbstring
RUN apt-get update && \
apt-get -y install libapache2-mod-xsendfile \
libicu-dev libpq-dev libonig-dev \
&& docker-php-ext-install intl pdo \
mysqli pdo_mysql pgsql pdo_pgsql \
mbstring
COPY conf/ocw_vod_dl.conf /etc/apache2/conf-enabled
COPY conf/mod_limitipconn.so /usr/lib/apache2/modules
COPY conf/limitipconn.load /etc/apache2/mods-available
RUN a2enmod headers limitipconn ratelimit xsendfile
EXPOSE 80
CMD ["apache2-foreground"]docker-compose_tst.yml 如下。
# version: '2'
services:
ocw-dl:
container_name: ocw-dl-server
build: .
domainname: ocw.aca
hostname: ocw-dl-server
working_dir: /var/www/html
volumes:
- ../web:/var/www/html
- /ext_hd8t/ajax/wk_backup/ocw_bak/vod:/var/www/html/vod_dl
ports:
- 8380:80以上為 2024-01-23 更新,陽明山下雪之日。
| package main import ( "fmt" ) func main() { done := make(chan bool) values := []string{"a", "b", "c"} for _, v := range values { go func() { fmt.Println(v) done <- true }() } // wait for all goroutines to complete before exiting for _ = range values { <-done } } |
| values := []string{"a", "b", "c"} for _, v := range values { go func(u string) { fmt.Println(u) done <- true }(v) } |
| values := []string{"a", "b", "c"} for _, v := range values { v := v // create a new 'v'. go func() { fmt.Println(v) done <- true }() } |