Я пытаюсь загрузить файл с моего сайта на свой сервер, но не могу найти, почему и где я делаю это неправильно.Загрузка файла на сервере apache через php
Вот мой код PHP:
$fn = $_FILES['file']['name'];
if (is_writable('.')) {
echo "Writable<BR>";
} else {
echo "Not writable<BR>";
}
$upfile = './'.basename($fn);
echo $upfile.'<BR>';
shell_exec("echo 'baaaaah' > test.baaaah");
$f = $_FILES['file']['tmp_name'];
echo $f.'<BR>';
if (is_uploaded_file($f)) { echo "uploaded<BR>"; } else { echo "not uploaded<BR>";}
$com = "test - f ".$f." && echo 'F' || echo 'N'";
echo $com.'<BR>';
echo shell_exec($com).'<BR>';
if (move_uploaded_file($f,$uploadfile)) {
echo "File transfer OK<BR>";
} else {
echo "File transfer NOK<BR>";
}
print_r($_FILES);
А вот сайт выход:
Writable
./flag.jpg
/tmp/phpyKvhEz
uploaded
test - f /tmp/phpyKvhEz && echo 'F' || echo 'N'
N
File transfer NOK
Array ([file] => Array ([name] => flag.jpg [type] => image/jpeg [tmp_name] => /tmp/phpyKvhEz [error] => 0 [size] => 1660))
Так первая вещь, которую я могу проверить, если моя папка доступна для записи (это не предназначено, чтобы быть, но я «» переместился сюда, потому что папка, в которой я хочу, тоже не работала (такое же поведение, как «.» через ...)) => check
Затем я пытаюсь открыть файл shell_exec здесь juste, чтобы быть уверенным => проверить, файл на сервере
Затем я проверяю, если временный файл создается на сервере: - проверить, во всяком случае is_uploaded думает файл здесь - не проверял, но тест на временный файл не работает (а так как файл не должны быть устранены до конца сценария он должен увидеть файл здесь IMHO?)
Тогда я пытаюсь сделать move_uploaded_file => не проверить
И я напечатает $ _FILES, который не показывает ничего подозрительного (error = 0, имена файлов соответствуют тем, что я вижу ранее).
Я не могу понять, что идет не так, ни где ошибка может исходить от> <
Вы, кажется, не определяете имя файла назначения '$ uploadfile' в любом месте. Вероятно, вы хотите '$ upfile'. – jeroen