ASP 添付ファイルをアップロードできないか、Microsoft VBScript ランタイム エラー エラー '800a0005' が報告されます: 無効なプロシージャ呼び出しまたはパラメータ: 'chr'。
昨日、会社のサーバーのシステムを再構築しましたが、以前はサーバーで正常に動作していましたが、再実行後は正常に動作しなくなるという問題が発生したため、Googleで検索して調べました。この問題を解決するために、以下の解決策をお送りします。問題を抱えている友人は、回り道をしないでください。
1.権限の問題
ファイルをアップロードするフォルダー「ゲスト ユーザー」に書き込み権限があることを確認してください。一部のファイルはデータベースに保存されており、変更権限も必要です。
2. ファイルサイズの制限
セキュリティ上の理由から、IIS 6 のデフォルトの最大リクエストは 200K です (つまり、送信されるデータの最大制限は 200K バイト、204800 バイトです)。
解決:IIS Admin Service サービスを閉じます。
/Windows/system32/inesrv/metabase.xml を開きます
ASPMaxRequestEntityAllowed の値を必要な値に変更します。デフォルトは 204800 です。
IIS管理サービスを開始する
変更後は、machine.config ファイルも変更する必要があります。
Asp.net では、アップロードされるファイルの既定のサイズは 4096 KB、つまり 4M ですが、このデータは Web.config で変更できます。通常、より一般的な方法は、C:/WINDOWS/Microsoft.NET/Framework/v1.1.4322/CONFIG ディレクトリにある machine.config ファイルを直接変更することです (フレームワークのバージョンは異なるため、使用するバージョンのディレクトリを入力してください) ) httpruntime を見つけて、この行の maxRequestLength の値を理想的な値に変更します。たとえば、8M が必要な場合は、「8192」と入力します。
3. 中国語システム、IIS の英語パッチをインストール
調査の結果、お客様が使用していたホストが中国語版 Windows 2003 であったが、その後英語版 Windows の空間に変更され、問題が発生したことが判明しました。
一般に、システムが IIS をアップグレードした後、またはパッチを適用した後でも、ASP ファイルの前にコードを追加するだけで同じ問題が発生することがあります。
<!-- ASP では最初の行でなければなりません -->
<% @LCID=4100 %>
4.言葉の問題
コントロールパネルの地域設定を「中国」に設定します。
5. 日付と時刻の問題
コントロール パネルで、地域と言語のオプションに移動し、時間形式を H:mm:ss に設定し、コントロール パネルの [日付と時刻] でタイム ゾーンを北京に変更します。これを変更した理由は、一部の添付ファイルには時刻に基づいて名前が付けられているため、時刻の形式が間違っているとプログラムでエラーが報告されるためです。
6. アップロードされたファイルに使用される中国語の名前またはパス
ASP コンポーネントレスアップロードを使用する場合、中国語はサポートされていないため、アップロードパスに中国語が含まれているかどうかを確認する必要があります。
7. 「Microsoft VBScript ランタイム エラー エラー '800a0005' 無効なプロシージャ コールまたはパラメータ: 'chr'」エラーが報告される (私の場合はこの種の問題に属します)
Microsoft VBScript ランタイム エラー '800a0005' 無効なプロシージャ呼び出しまたは引数: 'Chr' /admin/inc/UPLOAD.INC、
75行目 サーバーが英語版を使用しているため、Chr関数が指定した文字コードに関連する文字を含むStringを返すため、このようなエラーが発生する可能性があります。
関連構文: Chr(charcode) 必要な charcode パラメータは、特定の文字を識別するために使用される Long です。注: 0 から 31 までの数字は、印刷されない標準の ASCII コードと同じです。
たとえば、Chr(10) は改行文字を返します。文字コードの通常の範囲は 0 ~ 255 です。ただし、DBCS システムでは、実際の文字コードの範囲は -32768 ~ 65535 です。 注: ChrB 関数は、文字列に含まれるバイト データを操作します。 ChrB は、1 バイトまたは 2 バイトの文字を返すのではなく、常に 1 バイトを返します。 ChrW 関数は、Unicode をサポートしないプラットフォームでは、Unicode を含む文字列を返します。その機能は Chr 関数と同じです。
したがって、コードのエラー行 75 行の chr を置き換えるだけです: stemp=stemp&chr(AscW(ChrB(AscB(upfile_5xSoft_Stream.Read(1)))&ChrB(c))) を chrw に置き換えます。