PHP + wget を使用して、古い cgi-bin コントロール パネルの web-to-fax にファイルをアップロードしています。
cgi (言語がわからない) はファイル形式 (doc txt pdf) をチェックし、「ファイル形式が正しくありません」というエラーを返します。手動で行うと、すべて正常に動作します。
フォームは 6 つのステップで構成され、各ステップは非常に類似しており (送信先、再試行回数などを尋ねられます)、私の PHP + wget スクリプトは期待どおりに動作します (Cookie の処理、投稿、取得など)。
これは、フォームがどのように見えるかです (元から明るく翻訳されています):
<FORM ACTION="xyz_httpfileupload" METHOD="post" ENCTYPE="multipart/form-data">
Write the file with full path:
<INPUT TYPE="FILE" NAME="sourcefile" size=40 maxlength=200>
<input type=hidden name=destfile value="N527yb">
<!-- this is a random generated filename -->
<input type=hidden name=urlredirect value="./xyz_upload?destfile=N527yb&filename=/tmp/VOTU9.txt">
<!-- this is another random generated filename -->
<input type=submit name="Upload" value="Upload">
</FORM>
コード (およびいくつかのテスト) は、GET と POST の両方を使用できることを示しています。
これは私のコードで、説明が続きます:
$command = ' wget --debug -qSO- --cookies=on --keep-session-cookies '.
' --save-cookies='.$cookie.' --load-cookies='.$cookie.
' --header="Content-Type:text/plain" '.
' --post-file="'.$file.'" '.
// ' --post-data="sourcefile='.$rawfile.'" '.
' --post-data="'.
'destfile='.$randfile.
'&urlredirect=xyz_delivery?destfile='.$randfile.
'&filename=/tmp/'.$randname.'.txt" '.
'&pload=Upload "xyz_httpfileupload" ';
$data = shell_exec($command." && sleep 10 2>&1 | tee ".$dir."logfile.txt");
$cookie は、Cookie ファイルへの完全なサーバー パスです。期待どおりに動作します。
$file は、ファイルへの完全なサーバー パスです。シンプルな file.txt です
$randfile と $randname は、HTML 出力で preg_match を使用して取得されます。
$rawfile でコメントされた行は、ファイルの代わりに生の urlencoded コンテンツを送信しようとしています: 誰かがそれは有効な代替手段だと言いますが、私にとってはそうではありません, または少なくとも私はそれを正しくコーディングしませんでした.
また、urlredirect に表示されている URL に直接投稿しようとしましたが、同じエラー ファイル形式が正しくありませんが、ステップをジャンプすると cgi からの正しい解析を保証できません。
いずれにせよ、logfile.txt は空のままでした。
curl が私の生活を楽にすることはわかっていますが、スクリプトが存在する ubuntu プラットフォームは wget しかサポートしておらず、道半ばだと感じています。
それをデバッグする方法についてアドバイスしてください。更新のたびに生成されたランダムな名前が失われるため、シェル経由ではできません。おそらくTCPdump?アドバイスをいただければ幸いです。これは、この問題を確実に解決するための究極の議論だと思います。