4

我正在将 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> 

上传.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]:无法打开流:第 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 数组中读取tmp_name而不是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 回答