4

Web サイトに rsa 秘密鍵 (.pem ファイル) をアップロードし、fopen を使用して内容を読み取っていますが、最近、あまり意味がなく同じエラーが何度も発生します。

HTML

  <form enctype="multipart/form-data" action="upload.php" method="post">
    <input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
    Choose a file to upload: <input name="uploaded_file" type="file" />
    <input type="submit" value="Upload" />
  </form> 

Upload.php

<?php
session_start();

if( $_SERVER['SERVER_PORT'] == 80) {
    header('Location:https://'.$_SERVER['HTTP_HOST'].$_SERVER["REQUEST_URI"]); 
    die();
} 



echo $_FILES['uploaded_file']['name'];

//Сheck that we have a file
if((!empty($_FILES["uploaded_file"])) && ($_FILES['uploaded_file']['error'] == 0)) {
  $filename = basename($_FILES['uploaded_file']['name']);
  $ext = substr($filename, strrpos($filename, '.') + 1);
  if (($ext == "pem") && ($_FILES["uploaded_file"]["type"] == "text/plain")) {

$fh = fopen($_FILES['uploaded_file']['name'], 'r');

//continue with code
  } else {
     echo "Error: Only pem files are accepted for upload";
  }
} else {
 echo "Error: No file uploaded";
}
?>

サイトはエラーを返し続けます:

警告: fopen(mykey.pem) [function.fopen]: ストリームを開くことができませんでした: No such file or directory in .... on line 38

(これはfopenラインです)。fopen 状態になるという事実は、実際にはアップロードすることを証明していますが、fopen を使用すると (file_get_contents($_FILES['uploaded_file']['name']); も使用してみましたが失敗しました)、エラーが返されます。

なんてこった!

最終的な注意事項:

なんらかの理由で、fopen() は OpenSSL 証明書を読み取らず、エラーを返します。

openssl_private_decrypt(): 提供されたリソースは有効な OpenSSL X.509/key リソースではありません

ただし、 file_get_contents を使用すると機能します。

4

2 に答える 2

6

間違ったファイル (名前) を開こうとしていると思います。コードのどこにも move_uploaded_file() が表示されないため、おそらく$_FILES 配列からnameではなくtmp_nameを読み取る必要があります。

$fh = fopen($_FILES['uploaded_file']['tmp_name'], 'r');
于 2010-11-03T16:10:30.117 に答える
2

試す

  $fh = fopen($_FILES['uploaded_file']['tmp_name'], 'r');
于 2010-11-03T16:10:36.583 に答える