Jump to content

Searching through and listing a remote directory (directory listings enabled)


ThermalSloth

Recommended Posts

Hi guys,

 

I've been working on a script for a while now,

and I'm sure it doesn't look great and all, and it's probably really messed up..

But right now I've finally got it working!

There's only 1 thing I'd really like to add..

Searching through & listing of remote directories!

The directories I'm trying to list have directory listings enabled,

and I think it *should* be possible.

I just have no clue how.

 

Here's my current code in a beautiful mix of HTML and PHP:

 

<?
$border_size = "0";

function returner($what) {
$what=explode("/",$what);
$tps=count($what);
$what=$what[$tps-1];
return $what;
}

$page_url= "";
$home_url=returner(__FILE__);
if(isset($_GET['q'])) {
$qtext=$_GET['q'];
} else {
$qtext="";
}
function getdirsize($directory, $format=FALSE) {
$size = 0;
if(substr($directory,-1) == '/') {
	$directory = substr($directory,0,-1);
}
if(!file_exists($directory) || !is_dir($directory) || !is_readable($directory)) {
	return -1;
}
if($handle = opendir($directory)) {
	while(($file = readdir($handle)) !== false) {
		$path = $directory.'/'.$file;
		if($file != '.' && $file != '..') {
			if(is_file($path)) {
				$size += filesize($path);
			}
			elseif(is_dir($path)) {
				$handlesize = getdirsize($path);
				if($handlesize >= 0) {
					$size += $handlesize;
				} else {
					return -1;
				}
			}
		}
	}
	closedir($handle);
}
if($format == TRUE) {
	if($size / 1048576 > 1) {
		return round($size / 1048576, 1).' MB';
	}
	elseif($size / 1024 > 1) {
		return round($size / 1024, 1).' KB';
	} else {
		return round($size, 1).' bytes';
	}
} else {
return $size;
}
}

if(isset($_GET['type'])){
  $type=$_GET['type'];
} else {
  $type="new";
}

$textures=0;
$models=0;
$avatars=0;
$seqs=0;
$sounds=0;

foreach (glob("textures/*.jpg") as $texture){
$textures++;
}
foreach (glob("models/*.zip") as $model){
$models++;
}
foreach (glob("avatars/*.zip") as $avatar){
$avatars++;
}
foreach (glob("seqs/*.zip") as $seq){
$seqs++;
}
foreach (glob("sounds/*.zip") as $sound){
$sounds++;
}
?>
<!DOCTYPE html>
<html>
<head>
	<title>ObjectPath Search</title>
	<style type="text/css">
		#wrapper {
			width: 850px;
			margin: 30px auto 30px auto;
			padding: 10px;
		}

		body 
		{
			color:#C6C6C6;
			background:#1E1E1E;
			/* margin:0; padding:0; */
			overflow-x:hidden;
		}

		#tabs {
			font: 85% "Trebuchet MS", sans-serif;
		}

		.left {
			float: left;
		}

		.right {
			float: right;
		}

		a:link, a:visited, a:active {
			color: #3DB015;
			text-decoration: none;
		}

		a:hover {
			color: #00E0FF;
		}

		h2 {
			color: #3DB015;
			padding-bottom: 0.2em;
			font-size: 110%;
		}
		ul#icon {margin: 0; padding: 0;}
		ul#icon li {margin: 1px; position: relative; padding: 1px 0; cursor: pointer; float: left;  list-style: none;}
		ul#icon span.ui-icon {float: left; margin: 0 1px;}
	</style>
	<link type="text/css" href="http://objects.jk-hosting.com/search/css/black-tie/jquery-ui-1.8.2.custom.css" rel="stylesheet" />
	<script type="text/javascript" src="http://objects.jk-hosting.com/search/js/jquery-1.4.2.min.js"></script>
	<script type="text/javascript" src="http://objects.jk-hosting.com/search/js/jquery-ui-1.8.2.custom.min.js"></script>
	<script type="text/javascript">
		function formHandler(form){
			var URL = document.form.site.options[document.form.site.selectedIndex].value;
			window.location.href = URL;
		};

		$(function(){
			// Tabs
			$('#tabs').tabs();
		});
	</script>
</head>
<body>
	<div id="wrapper">
		<div id="tabs"> <!-- Tabs start -->
			<ul>
				<li><a href="#tab-search">Search</a></li>
				<li><a href="#tab-list">List Objects</a></li>
				<li><a href="#tab-info">OP info</a></li>
			</ul>

			<div id="tab-search"><!-- Searchtab start -->
				Please enter a string to search for, and choose a folder to search in. <br /><br />
				<form name="Search">
				<input type='hidden' value='search' name='type'>
				<input value='<? print $qtext; ?>' type='text' name='q'> 
				<select name='map'>
				<option selected='selected' value='models'>Models</option>
				<option value='avatars'>Avatars</option>
				<option value='textures'>Textures</option>
				<option value='seqs'>Seqs</option>
				<option value='sounds'>Sounds</option></select> <input type='submit' value='Search'>
				</form>
			</div> <!-- Searchtab end -->

			<div id="tab-list"><!-- Listtab start -->
				Please pick a folder to browse. <br /><br />
				<form name="form">
					<select name="site" onChange="javascript:formHandler()">
					<option value="#">Look in folder...</option>
					<option value="<? print $page_url; ?>?type=list&map=models">Models</option>
					<option value="<? print $page_url; ?>?type=list&map=avatars">Avatars</option>
					<option value="<? print $page_url; ?>?type=list&map=textures">Textures</option>
					<option value="<? print $page_url; ?>?type=list&map=seqs">Seqs</option>
					<option value="<? print $page_url; ?>?type=list&map=sounds">Sounds</option>
					</select>
				</form>
			</div> <!-- Listtab end -->

			<div id="tab-info"><!-- Info tab start -->  
				The OP currently contains: <br /><br />
				<table>
					<tr><td><b><? echo $models; ?></b></td> <td>Models</td></tr>
					<tr><td><b><? echo $avatars; ?></b></td> <td>Avatars</td></tr>
					<tr><td><b><? echo $textures; ?></b></td> <td>Textures</td></tr>
					<tr><td><b><? echo $seqs; ?></b></td> <td>Seqs</td></tr>
					<tr><td><b><? echo $sounds; ?></b></td> <td>Sounds</td></tr>
				</table>
			</div> <!-- Info tab end -->
		</div> <!-- Tabs end -->
	</div>

<!-- Start PHP generated content -->

<?
if($type=="search" || $type=="list") {
$M=$_GET['map'];
if($type=="search") {
	$Q=$_GET['q'];
	$empty="Nothing found with <b>\"" . $Q . "\"</b> in it's name.<br />\nPlease make a more general search query, or try a different folder.\n\n";
} else {
	$Q="";
	$empty='This folder is empty';
}
if($M=="textures") {
	$ext="jpg";
} else {
	$ext="zip";
}
$i=0;
print "<hr>\n";
$endfile=array();
$endsize=array();
$endsize2=array();
    foreach (glob($M."/*".$Q."*.".$ext) as $filename) {
	$filename = explode(".", $filename);
	$filename=$filename[0];
	$filename = explode("/", $filename);
	$filename=$filename[1];
	$i++;
	$endfile[$i]=$filename;
	if($ext=="jpg") {
		$endfile[$i]="<a name='".$endfile[$i]."' href='".$pageurl."?type=view&name=".$endfile[$i]."&folder=".$M."&from=".$type."&addon=".$Q."'>".$endfile[$i]."</a>";
	}
	$endsize[$i]=$size;
	$endsize2[$i]=$size2;
}
if($i != 1) {
	print "<b>".$i."</b> items were found.\n<hr>\n";
} else {
	print "<b>".$i."</b> item was found.\n<hr>\n";
}
    echo("<table width='100%' border='" . $border_size . "' cellspacing='0' cellpadding='0' >\n");
if($i!=0) {
	for ($t = 1; $t < $i; $t++) {
		$thumbfile = $M."/".$endfile[$t].'.jpg';
		if(file_exists($thumbfile)) {
			$thumbnail = "<a name='".$endfile[$t]."' href='".$page_url."?type=view&name=".$endfile[$t]."&folder=".$M."&from=".$type."&addon=".$Q."'><ul id='icon'><li class='ui-state-default ui-corner-all' title='".$endfile[$t]."'><span class='ui-icon ui-icon-image'></span></li></ul></a>";
		} else {
			$thumbnail = "";
		}
		if($t=="1") {	
			echo("<tr><td width='10%'>Number</td><td width='3%'><ul id='icon'><li class='ui-state-default ui-corner-all' title='".$endfile[$t]."'><span class='ui-icon ui-icon-image'></span></li></ul></td><td width='60%'>Name</td></tr>\n");
		}
		echo("<tr><td>" . $t . "</td><td>".$thumbnail."</td><td>" . $endfile[$t] . "</td></tr>\n");
		flush();
	}
	$thumbfile = $M."/".$endfile[$t].'.jpg';
	if(file_exists($thumbfile)) {
		$thumbnail = "<a name='".$endfile[$t]."' href='".$page_url."?type=view&name=".$endfile[$t]."&folder=".$M."&from=".$type."&addon=".$Q."'><ul id='icon'><li class='ui-state-default ui-corner-all' title='".$endfile[$t]."'><span class='ui-icon ui-icon-image'></span></li></ul></a>";
	} else {
		$thumbnail = "";
	}
	echo("<tr><td>" . $t . "</td><td>".$thumbnail."</td><td>" . $endfile[$t] . "</td></tr>\n");
}
print "</table>\n";     
if($i=="0") {
	print $empty;
}
} elseif($type=="view") {
$filename=$_GET['name'];
$folder=$_GET['folder'];
  
if($_GET['from']=="list"){
	$addon="?type=list&map=".$folder."#".$filename;
}

if($_GET['from']=="search"){
	$addon="?type=search&q=".$filename."&map=".$folder."#".$filename;
}
print"<center><a href='".$home_url."'>Home</a></center>";
print "<hr>\n<center><img src='".$folder."/".$filename.".jpg'></img></center>\n<hr>\n<br />\n<a href='".$page_url."".$addon."'>Previous Page</a>\n";
}
$htmlshow="";
if($_GET['type']=="returnOPfile") {
if(isset($_GET['split'])) {
	$splitter=$_GET['split'];
} else {
	$splitter=" | ";
}
if(isset($_GET['html'])) {
	$htmlshow="<br />";
}
foreach (glob("textures/*.jpg") as $texture){
	if(isset($_GET['size'])) {
		$size=$splitter.filesize($texture);
	}
   		$texture = explode("/", $texture);
	$texture=$texture[1];
	print "textures".$splitter.$texture.$size."\n".$htmlshow;
}
  
foreach (glob("models/*.zip") as $model){
	if(isset($_GET['size'])) {
		$size=$splitter.filesize($model);
	}
   		$model = explode("/", $model);
	$model=$model[1];
	print "models".$splitter.$model.$size."\n".$htmlshow;
}
  
foreach (glob("avatars/*.zip") as $avatar){
	if(isset($_GET['size'])) {
		$size=$splitter.filesize($avatar);
	}
   		$avatar = explode("/", $avatar);
	$avatar=$avatar[1];
	print "avatars".$splitter.$avatar.$size."\n".$htmlshow;
}
  
foreach (glob("seqs/*.zip") as $seq){
	if(isset($_GET['size'])) {
		$size=$splitter.filesize($seq);
	}
   		$seq = explode("/", $seq);
	$seq=$seq[1];
	print "seqs".$splitter.$seq.$size."\n".$htmlshow;
}
    foreach (glob("sounds/*.zip") as $sound){
	if(isset($_GET['size'])) {
		$size=$splitter.filesize($sound);
	}
     	$sound = explode("/", $sound);
	$sound=$sound[1];
	print "sounds".$splitter.$sound.$size."\n".$htmlshow;
}
}
?>

<!-- End PHP generated content -->

</body>
</html>

 

So right now my question to you PHP freaks is,

can you please help me edit my script so I can search through a remote directory?

 

*This* is one of the directories I wish to be able to search through & list..

 

Thanks in advance.  :)

 

Edit;

It might help if you know what the site currently looks like. :)

*Click*

Remote, as in on another machine? If you can mount a network share, you should be able to use scandir(), or if you have ftp access, ftp_rawlist(). Not aware of any other ways, but that doesn't mean they don't exist.

No, I really have to access it via http.. :(

All of those files on that server are free to use, but you can't get FTP access.

(And the server isn't mine)

 

I got hinted by someone else about curl though,

maybe that would be useful?

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.