The mkdir()
is not working for me. What is going wrong in this code?
foreach($_FILES['documents']['tmp_name'] as $key => $tmp_name)
{
$file_name = $key.$_FILES['documents']['name'][$key];
$file_size =$_FILES['documents']['size'][$key];
$file_tmp =$_FILES['documents']['tmp_name'][$key];
$file_type=$_FILES['documents']['type'][$key];
$name = $_POST['uname'][$key];
$email = $_POST['uemail'][$key];
$password = $_POST['epass'][$key];
$file_names = time().$file_name;
$query = "INSERT INTO `table` VALUES
('', '$name', '', '', '$email', '$password', 1, '', 1, '', '$file_names', '$file_names', '', '', '', '', 1, '', '', '1', '')";
$resultl = $db->insert($query);
$userId = mysql_insert_id();
$output_dir = $_SERVER['DOCUMENT_ROOT']."uploads/users/$userId/";
mkdir($output_dir, 0777);
chmod($output_dir, 0777);
The directory is not being created. I searched in Stack Overflow for the solution and applied some of them but still no success. I am using wamp
; when I move the uploaded image without creating directory, then it moves the file.
$output_dir = $_SERVER['DOCUMENT_ROOT'] . "/uploads/users/$userId/";
mkdir($output_dir, 0777, true);
mkdir('$output_dir' ,0777) ;
chmod('$output_dir',0777);
should be
mkdir($output_dir ,0777) ;
chmod($output_dir,0777);
The user running your PHP script (most likely www-data
) should have the permission to create a folder in $output_dir, so you may want to check that it is indeed the case.
What's more, it's generally a bad programming habit to just ignore the return value of a system call. mkdir
will return FALSE on failure, which you should test against and then make sure your code acts accordingly should the directory creation fail... When mkdir
fails, it will also log a warning so you should be able to get more information on the actual problem by having a look at your logs (provided you're logging warnings).
Try this and if not working post the msg.
<?php
....
$output_dir = $_SERVER['DOCUMENT_ROOT']."/uploads/users/$userId/";
echo $output_dir;
$res = mkdir($output_dir ,0777, true) ;
var_dump($res);
$_SERVER['DOCUMENT_ROOT']."/uploads/users/$userId/";
Try adding a directory separator after $_SERVER['DOCUMENT_ROOT'] like above.
Give the appropriate permissions to the uploads
folder so the www-data
user can traverse it, and to the uploads/users
subfolder, with the write
permission.