Загрузка файла PHP продолжает выдавать ошибку - PullRequest
4 голосов
/ 03 ноября 2010

Я загружаю закрытый ключ 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]: ошибкаоткрыть поток: нет такого файла или каталога в .... в строке 38

(которая является строкой открытия).Тот факт, что он попадает в состояние fopen, доказывает, что он действительно загружает, но использование fopen (также пытался использовать file_get_contents ($ _ FILES ['uploaded_file'] ['name']); также безуспешно) возвращает ошибку.

что за пух!

ЗАКЛЮЧИТЕЛЬНЫЕ ЗАМЕЧАНИЯ:

По любой причине fopen () не любит читать сертификаты OpenSSL и возвращает ошибку:

openssl_private_decrypt (): предоставленный ресурс не является допустимым ресурсом OpenSSL X.509 / key

, если вы используете file_get_contents, он работает, однако.

Ответы [ 2 ]

6 голосов
/ 03 ноября 2010

Я полагаю, вы пытаетесь открыть не тот файл (имя). Поскольку я не вижу move_uploaded_file () в вашем коде, вам, вероятно, следует читать tmp_name вместо name из массива $ _FILES:

$fh = fopen($_FILES['uploaded_file']['tmp_name'], 'r');
1 голос
/ 03 ноября 2010

попробуй

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