まず、開発環境はRHEL 7.5(Maipo)にアップグレードされ、以前はOracle Solaris 10を使用していました。この問題は、SolarisからRed Hatに切り替えた後に始まりました。以下のKornシェルスクリプトは本番環境ではうまく機能しますが、まだSolaris 10では機能します。だから私はこれが問題に関連していると仮定します。圧縮されダウンロードされたzipファイルはzipフォルダに保存されません。デスクトップにダウンロードしたzipフォルダを開くと、zipフォルダが空になります。
下の画像はファイルのリストを示しています。ユーザーはダウンロードするファイルのチェックボックスを選択し、[圧縮とダウンロード]リンクをクリックします。これにより、選択したファイルが圧縮され、デスクトップに保存されます。残念ながら、zipフォルダは空です。どのアイデアが問題になる可能性がありますか?
これは以下のように呼び出されるシェルスクリプトです。
1 #!/bin/ksh
2 #
3 # Utility to zip up files in the configuration_aerodynamic_properties area.
4 # Script takes two arguments the directory and the file list.
5 # The file list is tab seperated.
6 # This script returns the zip file.
7 #
8 # $Log: vmdb_zip_files.sh,v $
9 # Revision 1.4 2014/10/21 19:53:31 wmorris1
10 # ASR 13563 - Change incorrect mime type text/text to text/plain.
11 #
12 # Revision 1.3 2012/04/30 18:46:03 wmorris1
13 # ASR 12774 - Fix SSL and IE issue found after going to SSL.
14 #
15 # Revision 1.2 2004/11/11 12:49:33 bmorris
16 # ASR 55414 - removed UNIX groups for zipped file.
17 #
18 # Revision 1.1 2004/10/18 20:10:32 bmorris
19 # Initial revision
20 #
21 #set -x
22 #set -v
23 function error_message {
24 echo "Content-Type: text/plain;"
25 echo "Content-Disposition: attachment; filename=\"download_error.txt\";"
26 COMMAND="unix2dos "
27 echo ""
28 echo "$(${COMMAND} <<-EOF
29 Error: $1
30
31 EOF
32 )"
33 }
34 if [ "$#" -lt 2 ]; then
35 error_message "Insufficient arguments to $(basename $0)!"
36 return 1
37 fi
38 CONTENT="application/x-zip-compressed"
39 # Parse the directory path.
40 # Internal Field Sep (IFS) empty, cause spaces in file names, directories are important
41 IFS=$""
42 FULL_DIRECTORY_PATH=$(echo "${1}" | tr -d '~\\')
43 # File lists are seperated by tabs, parse them
52 IFS=$(printf '\t')
53 set -A FILE_LIST ${2}
54 # Make each of the file parameters in the file list protected.
55 let count=0
56 while (( $count < ${#FILE_LIST[*]} )); do
57 FILE_LIST[count]="\"${FILE_LIST[count]}\""
58 let count="count +1"
59 done
60 # Reset the IFS to the default.
61 IFS=$(echo " \n\t")
62 if [[ -n $3 ]]; then
63 WEB_FILENAME="$3"
64 fi
65 # Don't let the user download stuff.
66 if [[ "${1}" = *..* ]] || [[ "${1}" = *~* ]] || [[ "${2}" = *..* ]] || [[ "${2}" = *~* ]]; then
67 error_message "Path ${1}/${2} violates security."
68 return 1
69 elif [[ ! -f ${FULL_DIRECTORY_PATH} ]] && [[ ! -d ${FULL_DIRECTORY_PATH} ]]; then
70 error_message "${FULL_FILE_PATH} does not exist or is not regular."
71 return 1
72 elif [[ ! -r ${FULL_DIRECTORY_PATH} ]]; then
73 error_message "${FULL_FILE_PATH} is not readable from the web."
74 return 1
75 fi
76 # Zip up the f
79 COMMAND="cd \"${FULL_DIRECTORY_PATH}\"; zip -rX - ${FILE_LIST[*]}"
82 echo "Content-Type: ${CONTENT};"
83 if [[ -z $HTTP_USER_AGENT || $HTTP_USER_AGENT != *MSIE* ]]; then
84 # IE Can't handle ssl and zip files
85 echo "Pragma:no-cache"
86 fi
87
88 echo ""
98 eval "$COMMAND"
デバッグにはset -xを使用しました。これはサーバーのエラーログです。
cat vmdb_zip_files_8862.err
+ [ 3 -lt 2 ]
+ CONTENT=application/x-zip-compressed
+ IFS=''
+ tr -d '~\\'
+ echo /isweb/www/ss/issapt/vmdb/data_downloads/power_export
+ FULL_DIRECTORY_PATH=/isweb/www/ss/issapt/vmdb/data_downloads/power_export
+ printf '\t'
+ IFS=$'\t'
+ set -A FILE_LIST flight_dependent_heater_data_443949.txt flight_dependent_data_443949.txt
+ let count=0
+ (( 0 < 2 ))
+ FILE_LIST[0]='"flight_dependent_heater_data_443949.txt"'
+ let count='count +1'
+ (( 1 < 2 ))
+ FILE_LIST[1]='"flight_dependent_data_443949.txt"'
+ let count='count +1'
+ (( 2 < 2 ))
+ echo ' \n\t'
+ IFS=' \n\t'
+ [[ -n power_export.zip ]]
+ WEB_FILENAME=power_export.zip
+ [[ /isweb/www/ss/issapt/vmdb/data_downloads/power_export == *..* ]]
+ [[ /isweb/www/ss/issapt/vmdb/data_downloads/power_export == *~* ]]
+ [[ $'flight_dependent_heater_data_443949.txt\tflight_dependent_data_443949.txt' == *..* ]]
+ [[ $'flight_dependent_heater_data_443949.txt\tflight_dependent_data_443949.txt' == *~* ]]
+ [[ ! -f /isweb/www/ss/issapt/vmdb/data_downloads/power_export ]]
+ [[ ! -d /isweb/www/ss/issapt/vmdb/data_downloads/power_export ]]
+ [[ ! -r /isweb/www/ss/issapt/vmdb/data_downloads/power_export ]]
+ COMMAND='cd "/isweb/www/ss/issapt/vmdb/data_downloads/power_export"; zip -rX - "flight_dependent_heater_data_443949.txt" "flight_dependent_data_443949.txt"'
+ echo 'Content-Type: application/x-zip-compressed;'
+ [[ -z 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko' ]]
+ [[ 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko' != *MSIE* ]]
+ echo Pragma:no-cache
+ echo ''
+ eval 'cd "/isweb/www/ss/issapt/vmdb/data_downloads/power_export"; zip -rX - "flight_dependent_heater_data_443949.txt" "flight_dependent_data_443949.txt"'
+ cd /isweb/www/ss/issapt/vmdb/data_downloads/power_export
+ zip -rX - flight_dependent_heater_data_443949.txt flight_dependent_data_443949.txt
eval: zip: cannot execute [Exec format error]
zipがパッケージを介してインストールされているか手動でコンパイルされたかわからない場合は、システム管理者に連絡する必要がありますが、これは/usr/bin/zip
提供されたファイルの出力です/usr/bin/zip: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=747369bd1c41c4f8671a38f0055533a0c19a7769, stripped
。コマンドによると、uname -m
次の結果が表示されます。x86_64
typeの出力はzip
次zip is a tracked alias for /oraloc/app/product/11.2.0/client_1/bin/zip
のfile $(which zip)
とおりです/oraloc/app/product/11.2.0/client_1/bin/zip: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.4.0, not stripped
。
出力はecho $PATH
次のとおりです。/isdev/isapps/vmdb/tools/apache-maven-3.3.9/bin:/isdev/isapps/vmdb/tools/apache-ant-1.9.7/bin:/isdev/isapps/vmdb/runlib/current:/oraloc/app/product/11.2.0/client_1/bin:/oraloc/app/product/11.2.0/client_1/OPatch:/tools/ileaf.ileaf/sun4os5/lib:/tools/ghostscript/current/bin/:/tools/hp2xx/bin/:/usr/lib/lp/postscript/:/tools/ileaf.ileaf/bin/::/tools/gmake/3_79_1/bin:/tools/rcs/current/bin/:/bin:/usr/j2se/bin/:/tools/gcc/3_0_3/bin:/isdev/isapps/vmdb/tools/bin:/homedev/isdev2/cmarti35/tools/java/bin:/usr/sfw/bin:/bin:/usr/bin:/usr/contrib/bin:/usr/local/bin:/usr/bin/X11:/usr/bin/X11:/usr/dt/bin:/etc:/usr/etc:/opt/SUNWmotif/bin:/opt/SUNWspro/SC3.0/bin:/usr/ucb:/usr/sbin:/usr/ccs/bin:/tools/openssh/3.7.1p2/bin/:.:/usr/bin/X11
ベストアンサー1
このコマンドはtype zip
実行されないことを知らせる/usr/bin/zip
ので、出力はfile /usr/bin/zip
関係ありません。/oraloc/app/product/11.2.0/client_1/bin/
疑わしい使用中のものの一つです。
/usr/bin/zip
スクリプトで代わりに使用すると、問題zip
が解決されます。
しかし、長期的に見ると、問題は、変数に$PATH
優先順位が付けられたサイト固有のコンテンツがたくさんあることです(左から右に読みながら最初のディレクトリを最初に試みます)。サイトの特定の部分が正しく構成されていません。ウェブマスターにお問い合わせください。