Это то, что вы сказали ...
"У меня нет доступа к каталогу файлов apache tmp, нет доступа к журналам или настройкам, поэтому это затрудняет отладку. У меня есть только эта проблема на этом конкретном сервере (которым я не управляю; даже доступ к нему), и я использую один и тот же код на многих серверах, у которых нет этой проблемы. "
В соответствии с тем, что вы сказали выше, я предполагаю, что вы используете сервер, который используется многими пользователями. Если Apache этого сервера настроен на что-то вроде «mod_suphp», то ваши PHP-скрипты будут выполняться с использованием привилегий вашей учетной записи пользователя UNIX (например, «jef1234»), что означает, что у создаваемых вами файлов будет (« jef1234 ") в качестве владельца (вместо" apache "или" www-data ").
Временный каталог системы (обычно «/ tmp») обычно настраивается с включенным «sticky bit». Это означает, что каждый может создавать файлы в этом каталоге, но созданные файлы доступны только владельцу (вы можете рассматривать это как тот, кто его создал).
В результате, если конфигурация сервера недостаточно тщательна, вы можете столкнуться с именами файлов с файлами других пользователей. Например, когда вы загружаете файл «test.file», если другой пользователь уже загрузил другой файл с тем же именем, система отказывается перезаписать созданный им файл, так как вам придется использовать другое имя.
Обычно проблема не существует, потому что PHP достаточно умен, чтобы генерировать временные имена для загруженного файла (т. Е. $ _FILES ["html_form_input_name"] ["tmp_name"]). Если каким-то образом вы можете подтвердить, что это действительно причина, сервер явно неправильно настроен. Сообщите системному администратору о проблеме, а затем попросите его решить. Если это не может быть решено, вы можете сделать некоторые трюки JavaScript с именем файла перед его загрузкой (не проверено, просто идея) ...
★ Когда пользователь отправляет форму, переименуйте файл, например, из «test.file» в «jef1234-test.file-jef1234». После загрузки файла переместите файл (например, move_uploaded_file () ) в другое место и переименуйте его в исходное имя файла, удалив добавленные строки.
Надеюсь, это поможет ...
Аска Кенджи