Log in

View Full Version : PHP file system stuff


Ryan M.
01-12-2004, 07:53
Couple 'o php questions. :cool:

How can I tell what files/folders are in a directory?
How can I tell if a file exists without making two calls to fopen()? (assuming I then want to open it for read)

Brandon Martus
01-12-2004, 09:22
1) scandir() (http://us2.php.net/manual/en/function.scandir.php)
2) file_exists() (http://us2.php.net/file_exists)

Ryan M.
05-12-2004, 14:46
So, I'm trying to remove a directory here...

Windows XP system running Apache 2.0.50 with PHP 4.3.9. (Yes, I know that 2.0.52 is out. Upgrade is coming soon.) I'm trying to remove a directory which is located relative to the current one at ../pages/<dir>. I'm able to delete all the files in the directory, but on trying to remove the directory itself I get a "Permission denied" error.

Here's the exact code which applies:

...
// Ensure the directory only contains the struct file (and the current and parent dir references)
if(!(count(scandir("$dir/pages/$_POST[cat]")) <= 3))
{
header('Location: /index.php?section=admin&page=failure');
die();
}

// Remove struct file
if(file_exists("$dir/pages/$_POST[cat]/struct") && !unlink("$dir/pages/$_POST[cat]/struct"))
{
header('Location: /index.php?section=admin&page=failure');
die();
}

// Remove the directory
if(!rmdir("$dir/pages/$_POST[cat]"))
{
header('Location: /index.php?section=admin&page=failure');
die();
}
...

The struct file is just a file which is used by other parts of the site to maintain the directory structure. (The entire site is just a pre-alpha type thing for learning PHP and eventually some of the code will go into our team's site. The main thing is a user can login and edit content pages over the web.) The struct file does get deleted successfully; I see it disappear in my little Windows Explorer window. $dir contains a path which is brings the path back to the root of the site before going deeper in. In this case, it equals "./..". (The reason for the ./ at the beginning is how I generated it. I was too lazy to remove that part of it, as it shouldn't make a difference. Does it?)

I'm using pretty much the ship configuration which is in the php.ini-dist.recommended (or whatever that file was called) file.

Ideas? Was I unclear? :)

Ryan M.
06-12-2004, 07:36
And maybe this is related:

Using the code below (I had something in a different file, but I wrote this stuff out just for testing. I get the same results with both things.) I get... nothing. The page just appears again without the slightest hint it did anything. Actually, on the other one, I have more error checking and it catches that the move_uploaded_file() fails and reports it appropriately.

Here's the test code:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Untitled Document</title>
</head>

<body>
<?php
if(isset($_POST['image']))
{
echo $_FILES['image']['tmp_name'];
move_uploaded_file($_FILES['image']['tmp_name'], "./$_POST[name]");
echo "<img src='./$_POST[name]' />";
echo "<img src='./$_FILES[image][tmp_name]' />";
}
?>

<form method="post" action="test.php" enctype="multipart/form-data">
<table>
<tr>
<td>File:</td>
<td><input type="file" name="image" /><input type="hidden" name="MAX_FILE_SIZE" value="40000" /></td>
</tr>
<tr>
<td>Save as:</td>
<td><input type="text" name="name" /></td>
</tr>
</table>
<input type="submit" value="Upload" />
</form>
</body>
</html>


:confused:

--EDIT--
Acutally, after adding the enctype="multipart/form-data" to the form, I now get nothing. It just reloads.