2010-04-09 7 views
0

Мне нужна небольшая помощь здесь:PHP: проблема с файлами

Я получаю файл из формы для загрузки HTML. И у меня есть «целевое» имя файла в $ File.

Когда я делаю это:

copy($_FILES['binfile']['tmp_name'], $File); 
echo '<hr>' . filesize($_FILES['binfile']['tmp_name']); 
echo '<hr>' . filesize($File); 

Все работает отлично. Я получаю тот же номер дважды.

Однако, когда я удаляю первый звонок filesize(), я получаю «0» (ноль).

copy($_FILES['binfile']['tmp_name'], $File); 
echo '<hr>' . filesize($File); 

Любые предложения? Что я делаю не так? Почему мне нужно получить размер файла «оригинального» файла, прежде чем я смогу получить размер копии?

(Это на самом деле, что это такое:.. Мне нужно вызвать размер файла() для исходного файла Ни сна() ни вызова размер файла() другого файла помогает)

системы :

  • Apache 2.0
  • PHP 5.2.6
  • Debian Linux (Lenny)
+4

Не используйте 'copy'; вместо этого используйте 'move_uploaded_file'. – Gumbo

+0

@Gumbo: Круто. Не знал, что эта функция существует. Кажется, тоже решает мою проблему. – BlaM

+0

Вы проверили аналогичное поведение на другой установке? – zaf

ответ

2

Насколько велик этот файл? Вы делаете копию и сразу же указываете файл. Это может быть проблема?

Выполняет ли встроенная функция move_uploaded_file() одинаковое поведение?

+0

Это всего лишь 300 кб. Это, похоже, не проблема времени, потому что «сон» не помогает. – BlaM

+2

И копирование файла должно блокироваться до тех пор, пока оно не будет выполнено. –

+0

Это странно. Было бы интересно узнать, что происходит здесь. – zaf

0

Попробуйте это:

copy($_FILES['binfile']['tmp_name'], $File); 
clearstatcache(); 
$filesize = $_FILES['binfile']['size']; 
echo '<hr>' . $filesize; 
+0

Просто верьте мне, что он имеет значение - и он имеет другое значение, чем tmp_name, потому что, очевидно, я не хочу копировать файл сам по себе. – BlaM

+0

Поскольку этот код - это то, к чему я сжимал свою проблему. Я использую библиотеку, для которой требуется имя файла с расширением «.jpg». – BlaM

+0

Хорошо, отредактировал мой ответ. – SoLoGHoST

0

Как об этом:

copy($_FILES['binfile']['tmp_name'], $File); 

clearstatcache(); 
while (empty(filesize($File))) 
    sleep(2); 

echo '<hr>' . filesize($File); 

ИЛИ попробовать это:

copy($_FILES['binfile']['tmp_name'], $File); 

clearstatcache(); 
while (!file_exists($File)) 
    sleep(2); 

echo '<hr>' . filesize($File); 
Смежные вопросы