由於找不到 mod_files.sh 的實際副本,並且看到很多對它的抱怨/錯誤修復請求,這是一個可行的版本。它從 PHP.INI 取得所有參數,因此您沒有機會弄亂它
#!/bin/bash
#
# 為 PHP 會期儲存建立目錄。
# 取代「PHP 自帶」的版本,該版本 (a) 並非總是自帶
# 且 (b) 效果不佳。
#
# 此版本不接受任何參數,並使用 PHP.INI 中的值 (如果
# 它可以找到的話)。
#
# 適用於 OS-X 和 CentOS (以及所有其他) Linux。
#
# Jeff Levene 於 2013 年 2 月撰寫。
[[ $# -gt 0 ]] && echo "$0 不需要命令列參數。
它會執行 PHP.INI 檔案中所要求的所有動作 (如果可以找到的話)。
" && exit 1
# 盡可能尋找 PHP.INI 檔案
phpIni=/usr/local/lib/php.ini # 預設 PHP.INI 位置
[[ ! -f "$phpIni" ]] && phpIni=/etc/php.ini # 次要位置
[[ ! -f "$phpIni" ]] && phpIni= # 找到了嗎?
# 從 PHP.INI 檔案輸出給定的 (作為 $1) 參數
# 「空」括號中包含一個空格和一個 Tab。
#
PhpConfigParam() {
[[ ! "$phpIni" ]] && return
# 從 INI 檔案取得行
varLine=`grep "^[ ]*$1[ ]*=" "$phpIni"`
# 擷取值
value=`expr "$varLine" : ".*$1[ ]*=[ ]*['\"]*\([^'\"]*\)"`
echo "$value"
}
if [[ "$phpIni" ]]
then
savePath=`PhpConfigParam session.save_path`
# 如果前面有一個數字和分號,請移除它們
dirDepth=`expr "$savePath" : '\([0-9]*\)'`
[[ "$dirDepth" ]] && savePath=`expr "$savePath" : '[0-9]*;\(.*\)'` || dirDepth=0
bits=`PhpConfigParam session.hash_bits_per_character`
case "x$bits" in
x) echo "未定義 hash_bits_per_character。不執行。" ; exit 2 ;;
x4) alphabet='0 1 2 3 4 5 6 7 8 9 a b c d e f' ;;
x5) alphabet='0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u v' ;;
x6) alphabet='0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u v'
alphabet="$alphabet w x y z A B C D E F G H I J K L M N O P Q R S T U V W"
alphabet="$alphabet X Y Z - ,"
;;
*) echo "無法辨識 hash_bits_per_character。不執行。" ; exit 2 ;;
esac
else
echo "找不到 PHP.INI 檔案。不執行。抱歉。"
exit 2
fi
# 要建立的目錄深度為 $1。0 表示只建立指定的
# 目錄。起始目錄為 $2。
#
# 遞迴使用,所以變數必須為「local」。
doDir() {
local dir="$2"
if [[ -d "$dir" ]]
then
echo "目錄 '$dir' 已存在。沒有問題。"
elif [[ -f "$dir" ]]
then
echo "檔案 '$dir' 已存在。中止。" ; exit 2
else
if mkdir "$dir"
then
echo "目錄 '$dir' 已建立。"
else
echo "無法建立目錄 '$dir'。中止。" ; exit 2
fi
fi
chmod a+rwx "$dir"
if [[ $1 -gt 0 ]]
then
local depth=$(( $1 - 1 ))
for letter in $alphabet
do doDir $depth "$dir/$letter"
done
fi
}
echo "執行時使用 savePath='$savePath', dirDepth=$dirDepth, 以及 bitsPerCharacter=$bits。"
sleep 3
doDir $dirDepth "$savePath"
exit 0