2015-03-27 4 views
0

Я держу почтовую службу на моем VPS, который имеет веб-интерфейс с помощью RoundcubePHP - Невозможно прочитать загруженный временный файл

Но недавно я обнаружил, что мой Roundcube не может загружать аватары контактов правильно (который был моей первой попыткой загрузки аватаров). Таким образом, я посмотрел код и обнаружил, что он не удался при чтении свойств загруженного временного файла изображения.

Чтобы выяснить, было ли это вызвано Roundcube или нет, я написал простой скрипт.

<html> 
<body> 
<form method="post" action="/upload.php" enctype="multipart/form-data"> 
     <input type="file" name="test"> 
     <button type="submit">Upload</button> 
</form> 
</body> 
</html> 

<?php 
var_dump($_FILES); 
var_dump(file_exists($_FILES['test']['tmp_name'])); 

// read the properties by GD, as what Roundcube does 
$props = getimagesize($_FILES['test']['tmp_name']); 

var_dump($props); 

И выход был:

array(1) { 
    ["test"]=> array(5) { 
     ["name"]=> string(23) "kanakurayui_2_small.png" 
     ["type"]=> string(9) "image/png" 
     ["tmp_name"]=> string(14) "/tmp/php7OxqPq" 
     ["error"]=> int(0) 
     ["size"]=> int(49294) 
    } 
} 
bool(false) 
bool(false) 

Похоже, что файл был удален сразу после того, как загружен, однако я мог бы назвать move_uploaded_file() переместить временный файл в другой каталог (поэтому вложение почты правильно функционирует).

Я запускаю Ubuntu 14.04 с Nginx 1.6.2 и PHP-FPM 5.6.7 из репозиториев LaunchPad. И скрипт работает правильно на моей локальной машине, среда которой точно такая же.

Я думаю, проблема связана с определенной конфигурацией Nginx или PHP, но после проверки файлов конфигурации я мог найти только конфигурации о размере и сроке.

Я действительно смущен сейчас. Пожалуйста, помогите, спасибо.

UPDATE

Apache 2.4 + PHP работает должным образом на одном VPS.

+1

Можете ли вы попробовать установить apache, а затем проверить, является ли это проблемой nginx или php-fpm? – insanebits

+0

@insanebits apache 2.4 + php работает правильно. –

ответ

1

Я, наконец, решил проблему самостоятельно. Спасибо @insanebits за напоминание.

Я посмотрел на журнал Nginx и обнаружил следующее сообщение:

PHP message: PHP Warning: getimagesize(): open_basedir restriction in effect. File(/tmp/php1PACw4) is not within the allowed path(s): (/var/www) in /var/www/test/upload.php on line 5 

Так что я переехал в временный каталог/TMP/PHP и добавить/TMP/PHP для установки open_basedir в php.ini

Причина, по которой она работала на моей локальной машине, заключалась в том, что моя локальная конфигурация PHP была копией для разработки, и open_basedir был закомментирован.

Смежные вопросы