-1

I want to copy files to the mounted directory via code for example by using move_uploaded_file function of php?

I am using google-drive-ocamlfuse to mount google drive on local hard disk. I have a requirement to upload files to google drive via copying them to mounted directory? Is this possible via code?

I have followed this tutorial to mount a google drive. https://northshorequantum.com/archives/ubuntu_docker_googledrive

I can use cp to manually copy the files to mounted google drive.

Below is my php code to copy the uploaded file to mounted google drive folder.

<?php
$target_dir = "/googledrive/";
$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;
}
if(is_readable($_FILES["fileToUpload"]["tmp_name"])) {
  echo ("$file is readable");
} else {
  echo ("$file is not readable");
}
// 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.";
  }
}
?>

Below is the text of response I am getting once I try to upload. Before the warning message I do get message that file is readable.

I hope this extra information will be helpful.

File is an image - image/jpeg. Notice: Undefined variable: file in /var/www/app/upload.php on line 39 is readable Warning: move_uploaded_file(/googledrive/IMG-c162dafe.jpg): failed to open stream: Permission denied in /var/www/app/upload.php on line 49

Warning: move_uploaded_file(): Unable to move '/tmp/php7MZVED' to '/googledrive/IMG-c162dafe.jpg' in /var/www/app/upload.php on line 49 Sorry, there was an error uploading your file.

Also tried another method to copy file to mounted google drive.

Warning: touch(): Unable to create file /googledrive/somefile.php because Permission denied in /var/www/app/copy.php on line 5

Warning: copy(/googledrive/somefile.php): failed to open stream: Permission denied in /var/www/app/copy.php on line 7

I have also tried mounting with -o allow_other

Zahid
  • 1,822
  • 4
  • 18
  • 26
  • "Is this possible via code?" The answer is almost always "yes." The question is rather unfocussed for Stack Overflow. What have you tried toward this end and what issues are you running into? _That_ is the kind of thing SO can help with. – Chris Aug 08 '22 at 17:40
  • Open your file for reading. Open a new file on the destination drive for reading. Read from the first and write to the second. – Shawn Aug 08 '22 at 22:22
  • I have added extra information. Please have a look @Shawn – Zahid Aug 08 '22 at 23:49
  • Why is this tagged ocaml if you're using php? – Shawn Aug 09 '22 at 00:34
  • I was trying to tag google-drive-ocamlfuse but did not find this in existing tags. Also did not know ocaml is language. I have now updated tags – Zahid Aug 09 '22 at 00:36

1 Answers1

0

I was able to partially solve the issue by editing /etc/fuse.conf and making it look like

# mount_max = 1000
user_allow_other

Now my copy code is working but move_uploaded_file is silently failing without any warning.

My copy code looks like this

<?php
$source = "upload.php";
$destination = "/googledrive/"; // note how the destination has no file.
$newFile = "somefile.php";
touch($destination . $newFile);
// then do the copy part
copy($source, $destination.$newFile);
?>
Zahid
  • 1,822
  • 4
  • 18
  • 26
  • move_uploaded_file is also working provided the file is actually a uploaded file via POST – Zahid Aug 09 '22 at 06:49