0

久しぶりの初質問。基本的に、(1) ライブ環境で完全に動作するコード、(2) 自宅の OSX 環境で以前は動作していたが、(3) 現在は動作しないコードがあります。

HTML:

<form id="upload_form" action="php/upload_class_list.php" method="post" accept-charset="UTF-8" enctype="multipart/form-data" target="upload_target" >
    <label>File:</label>
    <input name="myfile" type="file" size="35" />
    <input id="upload_submit" type="submit" value="Upload" />
    <iframe id="upload_target" name="upload_target" style="width:0;height:0;border:0px solid #fff;"></iframe>
</form>

PHP ファイル:

$destination_path = getcwd().DIRECTORY_SEPARATOR;

$result = 0;

$target_path = $destination_path . basename( $_FILES['myfile']['name']);

if(@move_uploaded_file($_FILES['myfile']['tmp_name'], $target_path)) {   
   ...
}

sleep(1);
?>

<script language="javascript" type="text/javascript">top.upload_class_list(<?php echo $result; ?>);</script>

ifスクリプトは最後に起動しますが、PHP コードは(ローカル開発環境で) に入らないため$result、0 のままです。

pathアップロードするファイルの を取得していないようです。$destination_pathファイルが見つかった場所ではなく、PHP ファイルが配置されているフォルダーを指します。

Mountain Lion に変更して PHP のセットアップを再構築したときに、ローカル環境が機能しなくなった可能性があると思います。

ファイルが見つからないようにするために何が欠けていますか?

強調させてください: 私のライブ Hostmonster セットアップではまったく同じコードが正常に動作するため、環境の問題だと思います:)

ありがとう。

4

2 に答える 2

5

if(@move_uploaded_file($_FILES['myfile']['tmp_name'], $target_path)) {
... }

ファイルが見つからないようにするために何が欠けていますか?

ファイルが見つかったことが問題だと思われる理由は何ですか? ファイル見つかった可能性がありますが、失敗したのはmove...たとえば、Webサーバーにtarget_path.

確認してもいい:

$src = $_FILES['myfile']['tmp_name'];
$dst = $target_path;

if (!file_exists($src))
   die("Okay, the file is actually not found");

if (!is_readable($src))
   die("Very bad hosting juju. The file was uploaded but I can't read it?!?");

if (!is_writeable($destination_path))
   die("As expected, you can't upload a file here. This is a good thing.");

@touch($dst);
if (!file_exists($dst))
   die("So call me a Marine, the file SHOULD be writeable (which is not so good), and yet I could not write it! Perhaps disk full? User overquota? Some weird security setup?");

これが良い理由は、そのディレクトリには実行可能な PHP ファイルが格納されているためです。誰かがそこに PHP ファイルをアップロードできるとしたら、それは重大なセキュリティ ホールになるからです。

別のディレクトリを確保して、書き込み可能にすることができます (外部からの読み取り/実行アクセスを禁止するために、そこに .htaccess または他のシステムを配置することを忘れないでください)。

于 2013-04-09T10:27:34.227 に答える
-1

これかもしれません

<?php 
 $target = "upload/"; 
 $target = $target . basename( $_FILES['uploaded']['name']) ; 
 $ok=1; 
 if(move_uploaded_file($_FILES['uploaded']['tmp_name'], $target)) 
 {
    echo "The file ". basename( $_FILES['uploaded']['name']). " has been uploaded";
 } 
 else {
    echo "Sorry, there was a problem uploading your file.";
}
?> 
于 2013-04-09T10:15:11.137 に答える