Zonet kwam ik iets heel raars tegen met move_uploaded_file(). (Debian 10, PHP 7.3)
Ik upload een JPG-bestand, dat gaat goed met een kaal script speciaal bedoeld om te uploaden.
Doe ik dat met mijn raamwerk, dan lukt het met dit ene bestand niet, en met andere JPG-bestanden wel (?!)

De foutmelding is:
sha1_file(/tmp_safe/phpmWVgV0): failed to open stream: No such file or directory

Ik gebruik sha1_file() nog voor de aanroep naar move_uploaded_file(), en bij elke debug check tussendoor met file_exists() bestaat het bestand, kan ik de inhoud lezen met readfile(), totdat move_uploaded_file() zegt: dit bestand is niet geupload via HTTP, ik gooi het weg en return false.

Problematische code:
<?php
$filename = $_FILES['file']['tmp_name'];
$location = sprintf(UPLOADDIR . '%s.%s', sha1_file($filename), 'bin');
if (filesize($filename) == 0
  || !move_uploaded_file($filename, $location))
{
  trigger_error('can not copy from temporary folder');
}
?>

Fix:
<?php
$filename = $_FILES['file']['tmp_name'];
$array = explode(DIRECTORY_SEPARATOR, $filename);  // hergebruik unieke naam 
$location = sprintf(UPLOADDIR . '%s.%s', end($array), 'bin');
if (filesize($filename) == 0 
  || !is_uploaded_file($filename)
  || !copy($filename, $location))
{
  trigger_error('can not copy from temporary folder');
}
?>

Iemand enig idee hoe dit kan?

Reageren