Я пытаюсь создать простой php API, который будет работать на удаленном сервере и сохранять изображения (которые отправляются в API из скрипта Python) в определенный каталог на сервере.
Я наткнулся на этот код здесь и изменил его для своего варианта использования, но, похоже, он не работает. Что мне здесь не хватает? Я хочу переместить файл в /var/sftp/uploads
. Где я должен разместить этот файл php и как мне получить к нему доступ? Какой пользователь ОС должен владеть этим файлом в Ubuntu Linux и должен ли он иметь права на запись в /var/sftp/uploads
?
<?php
$allowedExts = array("gif", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/png"))
&& in_array($extension, $allowedExts)) {
if ($_FILES["file"]["error"] > 0) {
echo "Error: " . $_FILES["file"]["error"] . "<br>";
} else {
//Move the file to the uploads folder
move_uploaded_file($_FILES["file"]["tmp_name"], "/var/sftp/uploads/" . $_FILES["file"]["name"]);
}
} else {
//File type was invalid, so throw up a red flag!
echo "Invalid File Type";
}
?>
При нормальных обстоятельствах httpd не сможет получить доступ к папке типа «/var/sftp/uploads/».
Следовательно, создайте подпапку, известную как «uploadfile» (эта подпапка должна находиться прямо под папкой вашего файла php) и разрешите запись.
После этого измените строку
move_uploaded_file($_FILES["file"]["tmp_name"], "/var/sftp/uploads/" . $_FILES["file"]["name"]);
к
move_uploaded_file($_FILES["file"]["tmp_name"], "./uploadfile/" . $_FILES["file"]["name"]);
После того, как вы загрузили файл, проверьте, виден ли файл в этой папке «uploadfile».
вместо передачи python вы можете использовать передачу файлов php?
Я разрабатываю настольное приложение Python. Поэтому я хотел бы использовать Python. В коде Python я вызываю конечную точку PHP для передачи файлов. У меня есть обновление: PHP API теперь работает нормально, но в случае отсутствия файла он возвращает ошибку веб-сервера. Если я перезапущу сервер, а затем повторю попытку, передача файлов будет работать нормально. Это происходит из-за какого-то кеша php?
Я использовал этот код, и он сработал. Я также убедился, что папка /var/sftp/uploads
принадлежит www-data
, чтобы он мог записывать туда файлы.
<?php
$target_dir = "/var/sftp/uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
if (isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if ($check !== false) {
echo "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "File is not an image.";
$uploadOk = 0;
}
}
// Check if file already exists
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}
// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
// Allow certain file formats
if ($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
$uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "The file ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). " has been uploaded.";
} else {
echo "Sorry, there was an error uploading your file.";
}
}
?>
Привет Кен. Я попробовал ваш код, но файл не передается. Я использую библиотеку запросов Python для передачи файла. Ниже приведен мой код: import request file_name=input("Введите имя файла изображения для передачи: ") с open(file_name, 'rb') as f: r = request.post('example.com/file_upload.php', files = {file_name: f}) print("Ответ:",r)