Asp 添付ファイルをアップロードできないか、Microsoft VBScript ランタイム エラー '800a0005' が報告されます。無効なプロシージャ コールまたはパラメータ: 'chr' の解決策 昨日、Asp 添付ファイルをアップロードできないことがわかりました。以前のサーバーでは正常に動作していました。再実行すると正常に動作しなくなったので、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 に置き換えます。