最近、自宅にUbuntu OSとXAMPPを搭載した小さなサーバーをインストールしました。これで、PDF ファイルをサーバーにアップロードし、シェル スクリプトを実行してそこからページを抽出するためのシンプルな PHP ベースのインターフェイスができました。ローカル ネットワーク (ローカル IP によるアクセス)、自宅のインターネット (外部 IP によるアクセス)、Android フォン経由のモバイル インターネット (外部 IP によるアクセス) からでも完全に機能します。しかし、私の職場のインターネットからも、妻の職場のインターネットからも機能しません (最も重要なことです)。
問題は、ファイルをアップロードできないことです。Web ページは無限に「考える」だけで、エラーは報告されず、どこを掘り下げて誰のせいにするかさえわかりません。スクリプトの残りの部分は、アップロード済みの PDF ファイルで問題なく動作します。
助けてください、少なくともどこを見始めるべきですか?
以下は PHP スクリプトの一部です (役立つかどうかはわかりません)。
if(isset($_POST["act"])) {
if($_POST["act"]=="get"){
if(isset($_FILES["upl"])&&$_FILES["upl"]["name"]!=""){
if(getExt($_FILES["upl"]["name"])!=="pdf") {
$err=1;
}
else {
if(move_uploaded_file($_FILES["upl"]["tmp_name"],"pdfs/".$_FILES["upl"]["name"])) $file=$_FILES["upl"]["name"];
else $err=2;
}
} elseif(isset($_POST["file"])) {
if(file_exists("pdfs/".$_POST["file"])) $file=$_POST["file"];
else $err=3;
}
if($file) {
if(!isset($_POST["fp"],$_POST["lp"])||!is_int((int) $_POST["fp"])||!is_int((int) $_POST["lp"])) {
$err=4;
} else {
$pg=array($_POST["fp"],$_POST["lp"]);
if(isset($_POST["nname"])&&$_POST["nname"]!="") {
$output=$_POST["nname"];
if(getExt($output)!=="pdf")$output.=".pdf";
} else {
$exts=getExt($file,"");
$output=$exts[1]."_($pg[0]-$pg[1]).".$exts[0];
}
$doGS="./gs.sh \"pdfs/$file\" \"pdfs1/$output\" $pg[0] $pg[1]";
$doGS=`$doGS`;
if(file_exists("pdfs1/".$output)) header("location: result.php?res=$output");
}
}
}
}
のファイル アップロード セクションphp.ini
:
file_uploads=On
upload_tmp_dir="/opt/lampp/temp/"
upload_max_filesize=128M
フォルダへのアクセス許可temp
は 777 です。
HTMLフォームデータ:
<form action="procc.php" method="post" enctype="multipart/form-data">
<div>Choose uploaded file or upload a new one:</div>
<div style="width: 400px; height: 200px; border: 1px solid black; overflow-y: scroll;">
<table width="100%">
<tr><td><div><label><input onchange="chfile(this.value)" type="radio" name="file" value="1.Вентиляторы.pdf" />1.Вентиляторы.pdf</label></div></td><td><a target="_blank" href="pdfs/1.Вентиляторы.pdf">[open]</a></td></tr>
</table>
</div>
<div>Upload new PDF file: <span style="border: 1px solid black;"><input type="file" name="upl" accept="application/pdf" /></span><br />
(If both [new file to upload] and [file from list] is set, then file from list will be ignored)
</div>
<hr width="400" align="left" />
<div>Chosen file (from list): <span id="chosen"></span></div>
<div>First and last page: <input type="text" size="4" name="fp" /> - <input type="text" size="4" name="lp" /></div>
<div>New filename: <input type="text" size="10" name="nname" /></div>
<div>(last field can be ignored, in this case name will be based on the original filename)</div>
<div><button name="act" value="ext">Extract pages</button></div>
</form>
error_log
Apache 再起動時のファイル:
[Wed Oct 23 20:03:31.064659 2013] [mpm_prefork:notice] [pid 2339] AH00169: caught SIGTERM, shutting down
[Wed Oct 23 20:03:38.243555 2013] [ssl:warn] [pid 2857] AH01906: RSA server certificate is a CA certificate (BasicConstraints: CA == TRUE !?)
[Wed Oct 23 20:03:38.243843 2013] [ssl:warn] [pid 2857] AH01909: RSA certificate configured for www.example.com:443 does NOT include an ID which matches the server name
[Wed Oct 23 20:03:38.243957 2013] [suexec:notice] [pid 2857] AH01232: suEXEC mechanism enabled (wrapper: /opt/lampp/bin/suexec)
[Wed Oct 23 20:03:38.625858 2013] [auth_digest:notice] [pid 2858] AH01757: generating secret for digest authentication ...
[Wed Oct 23 20:03:39.123570 2013] [ssl:warn] [pid 2858] AH01906: RSA server certificate is a CA certificate (BasicConstraints: CA == TRUE !?)
[Wed Oct 23 20:03:39.123708 2013] [ssl:warn] [pid 2858] AH01909: RSA certificate configured for www.example.com:443 does NOT include an ID which matches the server name
[Wed Oct 23 20:03:39.123844 2013] [lbmethod_heartbeat:notice] [pid 2858] AH02282: No slotmem from mod_heartmonitor
[Wed Oct 23 20:03:39.157999 2013] [mpm_prefork:notice] [pid 2858] AH00163: Apache/2.4.4 (Unix) OpenSSL/1.0.1e PHP/5.5.3 mod_perl/2.0.8-dev Perl/v5.16.3 configured -- resuming normal operations
[Wed Oct 23 20:03:39.158180 2013] [core:notice] [pid 2858] AH00094: Command line: '/opt/lampp/bin/httpd -E /opt/lampp/logs/error_log -D SSL -D PHP'
サーバーのすべてのポート (1 ~ 65535) を開いたところ、職場のネットワークから正常に動作するようになりましたが、このソリューションはあまり好きではありません。どのポートを開いたままにしておくべきか、誰かにアドバイスをもらえますか? これまでに、HTTP、SSH 用、FTP 用に 2 つの 4 つのポートを開いていました。