nadhim Posted August 18, 2012 Share Posted August 18, 2012 hello i have a code to get some uploaded files from different folders i have users and i want each user session ( the username ) get his file from the server but simple thing here how to use a variable like $session_user in a path look at this code $FileName = "test.php"; $fh = fopen('./premium/$FileName', 'w') or die("can't open file"); i got this from other site but this doesnt work for me i have the path inside a function see this <?php class UploadHandler { protected $options; function __construct($options=null) { $this->options = array( // mysql connection settings 'database' => "ecf", 'host' => "localhost", 'username' => "root", 'password' => "99801277", 'script_url' => $this->getFullUrl().'/', 'upload_dir' => dirname($_SERVER['SCRIPT_FILENAME']).'/12345/', 'upload_url' => $this->getFullUrl().'/files/', 'param_name' => 'files', // Set the following option to 'POST', if your server does not support // DELETE requests. This is a parameter sent to the client: 'delete_type' => 'DELETE', // The php.ini settings upload_max_filesize and post_max_size // take precedence over the following max_file_size setting: 'max_file_size' => null, 'min_file_size' => 1, 'accept_file_types' => '/.+$/i', // The maximum number of files for the upload directory: 'max_number_of_files' => null, // Image resolution restrictions: 'max_width' => null, 'max_height' => null, 'min_width' => 1, 'min_height' => 1, // Set the following option to false to enable resumable uploads: 'discard_aborted_uploads' => true, // Set to true to rotate images based on EXIF meta data, if available: 'orient_image' => false, 'image_versions' => array( // Uncomment the following version to restrict the size of // uploaded images. You can also add additional versions with // their own upload directories: /* 'large' => array( 'upload_dir' => dirname($_SERVER['SCRIPT_FILENAME']).'/files/', 'upload_url' => $this->getFullUrl().'/files/', 'max_width' => 1920, 'max_height' => 1200, 'jpeg_quality' => 95 ), */ 'thumbnail' => array( 'upload_dir' => dirname($_SERVER['SCRIPT_FILENAME']).'/thumbnails/', 'upload_url' => $this->getFullUrl().'/thumbnails/', 'max_width' => 80, 'max_height' => 80 ) ) ); if ($options) { $this->options = array_replace_recursive($this->options, $options); } } protected function getFullUrl() { $https = !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off'; return ($https ? 'https://' : 'http://'). (!empty($_SERVER['REMOTE_USER']) ? $_SERVER['REMOTE_USER'].'@' : ''). (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : ($_SERVER['SERVER_NAME']. ($https && $_SERVER['SERVER_PORT'] === 443 || $_SERVER['SERVER_PORT'] === 80 ? '' : ':'.$_SERVER['SERVER_PORT']))). substr($_SERVER['SCRIPT_NAME'],0, strrpos($_SERVER['SCRIPT_NAME'], '/')); } protected function set_file_delete_url($file) { $file->delete_url = $this->options['script_url'] .'?file='.rawurlencode($file->name); $file->delete_type = $this->options['delete_type']; if ($file->delete_type !== 'DELETE') { $file->delete_url .= '&_method=DELETE'; } } protected function get_file_object($file_name) { $file_path = $this->options['upload_dir'].$file_name; if (is_file($file_path) && $file_name[0] !== '.') { $file = new stdClass(); $file->name = $file_name; $file->size = filesize($file_path); $file->url = $this->options['upload_url'].rawurlencode($file->name); foreach($this->options['image_versions'] as $version => $options) { if (is_file($options['upload_dir'].$file_name)) { $file->{$version.'_url'} = $options['upload_url'] .rawurlencode($file->name); } } $this->set_file_delete_url($file); return $file; } return null; } protected function get_file_objects() { return array_values(array_filter(array_map( array($this, 'get_file_object'), scandir($this->options['upload_dir']) ))); } protected function create_scaled_image($file_name, $options) { $file_path = $this->options['upload_dir'].$file_name; $new_file_path = $options['upload_dir'].$file_name; list($img_width, $img_height) = @getimagesize($file_path); if (!$img_width || !$img_height) { return false; } $scale = min( $options['max_width'] / $img_width, $options['max_height'] / $img_height ); if ($scale >= 1) { if ($file_path !== $new_file_path) { return copy($file_path, $new_file_path); } return true; } $new_width = $img_width * $scale; $new_height = $img_height * $scale; $new_img = @imagecreatetruecolor($new_width, $new_height); switch (strtolower(substr(strrchr($file_name, '.'), 1))) { case 'jpg': case 'jpeg': $src_img = @imagecreatefromjpeg($file_path); $write_image = 'imagejpeg'; $image_quality = isset($options['jpeg_quality']) ? $options['jpeg_quality'] : 75; break; case 'gif': @imagecolortransparent($new_img, @imagecolorallocate($new_img, 0, 0, 0)); $src_img = @imagecreatefromgif($file_path); $write_image = 'imagegif'; $image_quality = null; break; case 'png': @imagecolortransparent($new_img, @imagecolorallocate($new_img, 0, 0, 0)); @imagealphablending($new_img, false); @imagesavealpha($new_img, true); $src_img = @imagecreatefrompng($file_path); $write_image = 'imagepng'; $image_quality = isset($options['png_quality']) ? $options['png_quality'] : 9; break; default: $src_img = null; } $success = $src_img && @imagecopyresampled( $new_img, $src_img, 0, 0, 0, 0, $new_width, $new_height, $img_width, $img_height ) && $write_image($new_img, $new_file_path, $image_quality); // Free up memory (imagedestroy does not delete files): @imagedestroy($src_img); @imagedestroy($new_img); return $success; } protected function validate($uploaded_file, $file, $error, $index) { if ($error) { $file->error = $error; return false; } if (!$file->name) { $file->error = 'missingFileName'; return false; } if (!preg_match($this->options['accept_file_types'], $file->name)) { $file->error = 'acceptFileTypes'; return false; } if ($uploaded_file && is_uploaded_file($uploaded_file)) { $file_size = filesize($uploaded_file); } else { $file_size = $_SERVER['CONTENT_LENGTH']; } if ($this->options['max_file_size'] && ( $file_size > $this->options['max_file_size'] || $file->size > $this->options['max_file_size']) ) { $file->error = 'maxFileSize'; return false; } if ($this->options['min_file_size'] && $file_size < $this->options['min_file_size']) { $file->error = 'minFileSize'; return false; } if (is_int($this->options['max_number_of_files']) && ( count($this->get_file_objects()) >= $this->options['max_number_of_files']) ) { $file->error = 'maxNumberOfFiles'; return false; } list($img_width, $img_height) = @getimagesize($uploaded_file); if (is_int($img_width)) { if ($this->options['max_width'] && $img_width > $this->options['max_width'] || $this->options['max_height'] && $img_height > $this->options['max_height']) { $file->error = 'maxResolution'; return false; } if ($this->options['min_width'] && $img_width < $this->options['min_width'] || $this->options['min_height'] && $img_height < $this->options['min_height']) { $file->error = 'minResolution'; return false; } } return true; } protected function upcount_name_callback($matches) { $index = isset($matches[1]) ? intval($matches[1]) + 1 : 1; $ext = isset($matches[2]) ? $matches[2] : ''; return ' ('.$index.')'.$ext; } protected function upcount_name($name) { return preg_replace_callback( '/(??: \(([\d]+)\))?(\.[^.]+))?$/', array($this, 'upcount_name_callback'), $name, 1 ); } protected function trim_file_name($name, $type, $index) { // Remove path information and dots around the filename, to prevent uploading // into different directories or replacing hidden system files. // Also remove control characters and spaces (\x00..\x20) around the filename: $file_name = trim(basename(stripslashes($name)), ".\x00..\x20"); // Add missing file extension for known image types: if (strpos($file_name, '.') === false && preg_match('/^image\/(gif|jpe?g|png)/', $type, $matches)) { $file_name .= '.'.$matches[1]; } if ($this->options['discard_aborted_uploads']) { while(is_file($this->options['upload_dir'].$file_name)) { $file_name = $this->upcount_name($file_name); } } return $file_name; } protected function handle_form_data($file, $index) { // Handle form data, e.g. $_REQUEST['description'][$index] } protected function orient_image($file_path) { $exif = @exif_read_data($file_path); if ($exif === false) { return false; } $orientation = intval(@$exif['Orientation']); if (!in_array($orientation, array(3, 6, )) { return false; } $image = @imagecreatefromjpeg($file_path); switch ($orientation) { case 3: $image = @imagerotate($image, 180, 0); break; case 6: $image = @imagerotate($image, 270, 0); break; case 8: $image = @imagerotate($image, 90, 0); break; default: return false; } $success = imagejpeg($image, $file_path); // Free up memory (imagedestroy does not delete files): @imagedestroy($image); return $success; } protected function handle_file_upload($uploaded_file, $name, $size, $type, $error, $index = null) { $file = new stdClass(); $file->name = $this->trim_file_name($name, $type, $index); $file->size = intval($size); $file->type = $type; if ($this->validate($uploaded_file, $file, $error, $index)) { $this->handle_form_data($file, $index); $file_path = $this->options['upload_dir'].$file->name; $append_file = !$this->options['discard_aborted_uploads'] && is_file($file_path) && $file->size > filesize($file_path); clearstatcache(); if ($uploaded_file && is_uploaded_file($uploaded_file)) { // multipart/formdata uploads (POST method uploads) if ($append_file) { file_put_contents( $file_path, fopen($uploaded_file, 'r'), FILE_APPEND ); } else { move_uploaded_file($uploaded_file, $file_path); } } else { // Non-multipart uploads (PUT method support) file_put_contents( $file_path, fopen('php://input', 'r'), $append_file ? FILE_APPEND : 0 ); } $file_size = filesize($file_path); if ($file_size === $file->size) { if ($this->options['orient_image']) { $this->orient_image($file_path); } $file->url = $this->options['upload_url'].rawurlencode($file->name); foreach($this->options['image_versions'] as $version => $options) { if ($this->create_scaled_image($file->name, $options)) { if ($this->options['upload_dir'] !== $options['upload_dir']) { $file->{$version.'_url'} = $options['upload_url'] .rawurlencode($file->name); } else { clearstatcache(); $file_size = filesize($file_path); } } } } else if ($this->options['discard_aborted_uploads']) { unlink($file_path); $file->error = 'abort'; } $file->upload_to_db = $this->add_img($file->name); $file->size = $file_size; $this->set_file_delete_url($file); } return $file; } function query($query) { $database = $this->options['database']; $host = $this->options['host']; $username = $this->options['username']; $password = $this->options['password']; $link = mysql_connect($host,$username,$password); if (!$link) { die(mysql_error()); } $db_selected = mysql_select_db($database); if (!$db_selected) { die(mysql_error()); } $result = mysql_query($query); return $result; mysql_close($link); } function add_img($whichimg) { $add_to_db = $this->query("INSERT INTO uploads (logger,name) VALUES ('79227','files".$whichimg."') ") or die(mysql_error()); return $add_to_db; } function delete_img($delimg) { $delete_from_db = $this->query("DELETE FROM uploads WHERE name = '$delimg'") or die(mysql_error()); return $delete_from_db; } public function get() { $file_name = isset($_REQUEST['file']) ? basename(stripslashes($_REQUEST['file'])) : null; if ($file_name) { $info = $this->get_file_object($file_name); } else { $info = $this->get_file_objects(); } header('Content-type: application/json'); echo json_encode($info); } public function post() { if (isset($_REQUEST['_method']) && $_REQUEST['_method'] === 'DELETE') { return $this->delete(); } $upload = isset($_FILES[$this->options['param_name']]) ? $_FILES[$this->options['param_name']] : null; $info = array(); if ($upload && is_array($upload['tmp_name'])) { // param_name is an array identifier like "files[]", // $_FILES is a multi-dimensional array: foreach ($upload['tmp_name'] as $index => $value) { $info[] = $this->handle_file_upload( $upload['tmp_name'][$index], isset($_SERVER['HTTP_X_FILE_NAME']) ? $_SERVER['HTTP_X_FILE_NAME'] : $upload['name'][$index], isset($_SERVER['HTTP_X_FILE_SIZE']) ? $_SERVER['HTTP_X_FILE_SIZE'] : $upload['size'][$index], isset($_SERVER['HTTP_X_FILE_TYPE']) ? $_SERVER['HTTP_X_FILE_TYPE'] : $upload['type'][$index], $upload['error'][$index], $index ); } } elseif ($upload || isset($_SERVER['HTTP_X_FILE_NAME'])) { // param_name is a single object identifier like "file", // $_FILES is a one-dimensional array: $info[] = $this->handle_file_upload( isset($upload['tmp_name']) ? $upload['tmp_name'] : null, isset($_SERVER['HTTP_X_FILE_NAME']) ? $_SERVER['HTTP_X_FILE_NAME'] : (isset($upload['name']) ? $upload['name'] : null), isset($_SERVER['HTTP_X_FILE_SIZE']) ? $_SERVER['HTTP_X_FILE_SIZE'] : (isset($upload['size']) ? $upload['size'] : null), isset($_SERVER['HTTP_X_FILE_TYPE']) ? $_SERVER['HTTP_X_FILE_TYPE'] : (isset($upload['type']) ? $upload['type'] : null), isset($upload['error']) ? $upload['error'] : null ); } header('Vary: Accept'); $json = json_encode($info); $redirect = isset($_REQUEST['redirect']) ? stripslashes($_REQUEST['redirect']) : null; if ($redirect) { header('Location: '.sprintf($redirect, rawurlencode($json))); return; } if (isset($_SERVER['HTTP_ACCEPT']) && (strpos($_SERVER['HTTP_ACCEPT'], 'application/json') !== false)) { header('Content-type: application/json'); } else { header('Content-type: text/plain'); } echo $json; } public function delete() { $file_name = isset($_REQUEST['file']) ? basename(stripslashes($_REQUEST['file'])) : null; $file_path = $this->options['upload_dir'].$file_name; $success = is_file($file_path) && $file_name[0] !== '.' && unlink($file_path); if ($success) { $this->delete_img($file_name); foreach($this->options['image_versions'] as $version => $options) { $file = $options['upload_dir'].$file_name; if (is_file($file)) { unlink($file); } } } header('Content-type: application/json'); echo json_encode($success); } } in this code the important thing is the path to folder (12345) 'upload_dir' => dirname($_SERVER['SCRIPT_FILENAME']).'/12345/', this works perfect and get the data bu now if i use for example $path="/12345/"; how can i put his variable inside the path like this 'upload_dir' => dirname($_SERVER['SCRIPT_FILENAME']).' '.$path.' ', this didn't work how to get this variable inside this path ? please help . Quote Link to comment https://forums.phpfreaks.com/topic/267282-variable-in-a-directory/ Share on other sites More sharing options...
rythemton Posted August 18, 2012 Share Posted August 18, 2012 Putting the directory name as a variable should work, as long as the directory actually exists. If each user will have a different directory for their files, then you need to either create the directory when the username is created, or check to see if the directory exists when a file is uploaded, and create it if the directory does not exist. If the directory does exist but you still can't upload, then it may be a permissions issue. Quote Link to comment https://forums.phpfreaks.com/topic/267282-variable-in-a-directory/#findComment-1370487 Share on other sites More sharing options...
Pikachu2000 Posted August 18, 2012 Share Posted August 18, 2012 'upload_dir' => dirname($_SERVER['SCRIPT_FILENAME']).' '.$path.' ', Why are you adding all of those spaces before and after $path? Quote Link to comment https://forums.phpfreaks.com/topic/267282-variable-in-a-directory/#findComment-1370508 Share on other sites More sharing options...
nadhim Posted August 18, 2012 Author Share Posted August 18, 2012 I left spaces to show you its not this " ;-) Quote Link to comment https://forums.phpfreaks.com/topic/267282-variable-in-a-directory/#findComment-1370524 Share on other sites More sharing options...
Pikachu2000 Posted August 18, 2012 Share Posted August 18, 2012 Well, those spaces are probably why it doesn't work, and the added quoting isn't necessary. 'upload_dir' => dirname($_SERVER['SCRIPT_FILENAME']) . $path, Quote Link to comment https://forums.phpfreaks.com/topic/267282-variable-in-a-directory/#findComment-1370528 Share on other sites More sharing options...
nadhim Posted August 18, 2012 Author Share Posted August 18, 2012 I'll try this and give you the result Thank you pro Quote Link to comment https://forums.phpfreaks.com/topic/267282-variable-in-a-directory/#findComment-1370530 Share on other sites More sharing options...
nadhim Posted August 18, 2012 Author Share Posted August 18, 2012 it didn't work the code posted by Pikachu2000 is good I'm sure but where should i write the value $path in this document i wrote it directly under <? php do i need a function or any thing else to identify $path or its ok to write it anywhere ? example : $path="12345"; Quote Link to comment https://forums.phpfreaks.com/topic/267282-variable-in-a-directory/#findComment-1370563 Share on other sites More sharing options...
nadhim Posted August 19, 2012 Author Share Posted August 19, 2012 i modified the code to write the slashes before and after file name like this 'upload_dir' => dirname($_SERVER['SCRIPT_FILENAME']) . "/"."12345"."/", i did this because i thought the variable might not getting the slashes this works fine but again when i identify 12345 as a variable in the top of the same document its not working s.th like this $path="123445"; the code should be 'upload_dir' => dirname($_SERVER['SCRIPT_FILENAME']) . "/".$path."/", but its not working why i have no idea any help Quote Link to comment https://forums.phpfreaks.com/topic/267282-variable-in-a-directory/#findComment-1370570 Share on other sites More sharing options...
Christian F. Posted August 19, 2012 Share Posted August 19, 2012 First step to figure out why something is not working, is turning on error reporting. Then verify that the variables you're working with actually contains what you think they do, and if they do then begin to walk through the code step-by-step and/or reducing complexity. Quote Link to comment https://forums.phpfreaks.com/topic/267282-variable-in-a-directory/#findComment-1370577 Share on other sites More sharing options...
Pikachu2000 Posted August 19, 2012 Share Posted August 19, 2012 At this point, it would probably be a good idea to also define exactly what 'not working' means. Quote Link to comment https://forums.phpfreaks.com/topic/267282-variable-in-a-directory/#findComment-1370588 Share on other sites More sharing options...
nadhim Posted August 21, 2012 Author Share Posted August 21, 2012 hi problem solved because the path inside a function and the variable definition outside all i needed to do was adding (global) function to get the things to work like this // this is the variable i want to use as a directory definition $logger=$login_session; class UploadHandler { protected $options; function __construct($options=null) { // global function to allow the variable to work inside the function_construct // use this with any function you wanted the variable to work in global $logger; $this->options = array( 'script_url' => $this->getFullUrl().'/', // i used the variable as a folder path here and works fine 'upload_dir' => dirname($_SERVER['SCRIPT_FILENAME'])."/account/".$logger."/", Quote Link to comment https://forums.phpfreaks.com/topic/267282-variable-in-a-directory/#findComment-1371175 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.