3

私はウェブ上に注いでいますが、私の問題の解決策を見つけることができないようです。

ベクターグラフィック(ai、eps、pdf、svg)をアップロードするための簡単なフォームがあり、imagemagikでそれらをjpgに変換し、両方のファイルをMSSql2000の「image」フィールドに保存します。

「MSSQLエラー:16メガを超えてアップロードされたものについては、データベースコンテキストを「out-database」に変更しました」というエラーが表示されます。

私はこれらのファイルを保存するための好ましい方法ではないことを知っています...しかし、私たちが大きなファイルを受け取り始めるまで、それは私たちにとって完璧に機能していました。また、バージョンとセキュリティの処理方法にも便利です。

apacheとphpのログファイルを調整していますが、これが発生したときにログに記録されているエラーが1つも見つかりません!?

Webサーバーとmssqlサーバーは、大量のRAMを搭載した強力なマシンであり、同じギガビットスイッチ上に配置されているため、パフォーマンスについては心配していません。私はそれが機能する必要があります。

繰り返しになりますが、これは16メガ未満のものに対して問題なく機能しますが、どこにも参照できません。

**Our Web Server Specs**
2.6.38-11-server #50-Ubuntu
PHP Version 5.3.5-1ubuntu7.7
Apache Version  Apache/2.2.17 (Ubuntu)
Apache API Version  20051115
Max Requests    Per Child: 0 - Keep Alive: on - Max Per Connection: 100
Timeouts    Connection: 300 - Keep-Alive: 15

**Php mssql settings**
MSSQL Support   enabled
Active Persistent Links 0
Active Links    0
Library version FreeTDS
Directive   Local Value
mssql.allow_persistent  On
mssql.batchsize 0
mssql.charset   no value
mssql.compatability_mode    Off
mssql.connect_timeout   90
mssql.datetimeconvert   On
mssql.max_links Unlimited
mssql.max_persistent    Unlimited
mssql.max_procs Unlimited
mssql.min_error_severity    11
mssql.min_message_severity  11
mssql.secure_connection Off
mssql.textlimit 2147483647
mssql.textsize  2147483647
mssql.timeout   180

**Other relevant php.ini settings**
max_execution_time = 300
max_input_time = 300
memory_limit = 512M
post_max_size = 300M
upload_file_size = 300M
default_socket_timeout = 60
odbc.defaultlrl = 2147483647
odbc.defaultbinmode = 1

関連するコードスニペット:

        $f1 = ("" .$outloc . $clean1 . "");
        $f1string  =  file_get_contents($f1); 
        $f1data  =  unpack("H*hex", $f1string);
        $cf1 = ("" .$outloc . $confilename1 . $outext . "");
        $cf1string  =  file_get_contents($cf1); 
        $cf1data  =  unpack("H*hex", $cf1string);
        $cf1name = ("" .$confilename1 . $outext. "");

        //Upload to database
        $query_result  =  mssql_query("INSERT INTO art_converted_table (image_blob,filename,comment,received_dt,image_name,contact_email,po_number,upload_blob,upload_mime,upload_filename) VALUES (0x".$cf1data['hex'].",'$cf1name','$ccomment','$received_dt','$clean1','$email','$cponum',0x".$f1data['hex'].",'$file1type','$clean1')", $db_conn)
        or die('MSSQL error: ' . mssql_get_last_message());

問題になる可能性がある場合に備えて、解凍プロセスの後にsleep()タイマーを手動で追加しようとしました。なぜこれが起こっているのか、私は困惑しています。

mssqlに挿入できる16進文字列の最大長はありますか?

どんな助けでも大歓迎です!

ありがとう!

4

1 に答える 1

0

大きなファイルとPHPで同様の問題に遭遇し、ここで説明されているようにPHP FTP拡張機能を使用して回避しました

「http://au.php.net/manual/en/book.ftp.php」

次に、mysql.exe と shell_exec() を使用してクエリを実行しました。Web アプリケーションからクエリを実行することもできます。

フォームを引き続き使用する場合は、php.ini の post_max_size 変数のサイズを確認してください。フォームの投稿がボトルネックになっている可能性があります。

于 2012-04-11T15:14:34.783 に答える