Emily Alice Ответов: 2

[РНР] Как открыть и отредактировать файл в списке содержимого каталога.


Привет всем, у меня есть страница php have function list content of directory in computer such as c:/folder после этого я могу открыть, записать и сохранить любой файл, который я хочу в файле списка. Теперь у меня есть полный список содержимого каталога, теперь я хочу щелкнуть любой файл в списке файлов derectory, чтобы открыть его в текстовой области под списком содержимого drictory для просмотра и редактирования файла, а затем у меня есть кнопка submit, чтобы сохранить его. Я не знаю, как это сделать, поэтому, пожалуйста, исправьте мой код, который я даю под введением мне какого-нибудь примера демонстрационного кода или документа для ссылки. Пожалуйста, помогите мне. Большое спасибо.
Вот мой код:
https://www.mediafire.com/?19123qkmgmf7toj
Пример изображения о странице эквивалентной и аналогичной:
На этой картинке у него есть файл списка.
http://i1095.photobucket.com/albums/i472/OLAKEN91/f1_zpsd8327c90.jpg

Теперь мы можем нажать, чтобы открыть 1 файл, такой как” extensions.conf", чтобы прочитать, записать и сохранить его с помощью кнопки submit (update)
http://i1095.photobucket.com/albums/i472/OLAKEN91/f2_zpsf48caae7.jpg




РЕДАКТИРОВАТЬ: код, первоначально введенный Эмили Элис в качестве решения. - энхфлеп

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<style type="text/css">
	table
	{
		width: 100%;
		padding: 5px 5px 0px 5px;
		text-decoration:none;
	}
	a
	{
		text-decoration:none;
	}
	h3
	{
		padding: 5px 0px 5px 0px;
		color:#000;
	}
	tr
	{
		height: 20px;
	}
</style>
</head>
 
<body>
<!--code show file cua thu muc-->
		echo "<h3>LIST FILE OF FOLDER</h3>";
		// directory
		$dir = "";
		
        // Opens directory
        $myDirectory=opendir(".");
        
        // Gets each entry
        while($entryName=readdir($myDirectory))
		{
			$dirArray[]=$entryName;
        }
		
		// Finds extensions of files
        function findexts ($filename) 
		{
			$filename=strtolower($filename);//chuyen sang chu thuong
          	$exts=split("[/\\.]", $filename);//cat chuoi
          	$n=count($exts)-1;
          	$exts=$exts[$n];
          	return $exts;
		}
		 
		// Closes directory
        closedir($myDirectory);
        
        // Counts elements in array
        $indexCount=count($dirArray);
        
        // Sorts files
        sort($dirArray);
        
		// Print list content directory
		print("<table border="1" cellpadding="5" cellspacing="0" class="whitelinks">\n");
		print("<tr><th>Name</th><th>Type</th><th>Size</th><th>Date Modified</th></tr>\n");
		// Loops through the array of files
        for($index=0; $index < $indexCount; $index++)

		{

			if (substr("$dirArray[$index]", 0, 1) != ".")

			{		

				//File name

				$name=$dirArray[$index];

				$namehref=$dirArray[$index];

				

				// Gets File Extensions 

          		$extn=findexts($dirArray[$index]);

				

				// File type

				switch ($extn)

				{

					case "png": $extn="PNG Image"; break;

					case "jpg": $extn="JPEG Image"; break;

					case "bmp": $extn="BITMAP Image"; break;

					case "gif": $extn="GIF Image"; break;

					case "ico": $extn="Windows Icon"; break;

					case "txt": $extn="Text File"; break;

					case "log": $extn="Log File"; break;

					case "htm": $extn="HTML File"; break;

					case "php": $extn="PHP Script"; break;

					case "js": $extn="Javascript"; break;

					case "css": $extn="Stylesheet"; break;

					case "pdf": $extn="PDF Document"; break;

					case "zip": $extn="ZIP Archive"; break;

					case "docx": $extn="Microsoft Word Document"; break;

					case "mp3": $extn="MP# Format Sound"; break;

					default: $extn=strtoupper($extn)." File"; break;

          		}

          

          		// Gets file size 

          		$size=number_format(filesize($dirArray[$index]))." "."KB";

          

          		// Gets Date Modified Data

          		$modtime=date("M j Y g:i A", filemtime($dirArray[$index]));

          		$timekey=date("YmdHis", filemtime($dirArray[$index]));

				

				print("

          		<tr>
            	<td><a href="./$namehref">$name</a></td>
            	<td><a href="./$namehref">$extn</a></td>
           	 	<td><a href="./$namehref">$size</a></td>
            	<td sorttable_customkey="$timekey"><a href="./$namehref">$modtime</a></td>
          		</tr>");
				/*print("<tr><td><a href="\"$dirArray[$index]\"">$dirArray[$index]</a></td>");
				print("<td>");
				print(findexts($dirArray[$index]));
				//print(filetype($dirArray[$index]));
				print("</td>");
				print("<td>");
				print(filesize($dirArray[$index]));
				print("</td>");
				print("<td>");
				print($modtime);
				print("</td>");				
				print("</tr>\n");*/
			}
		}
		print("</table>\n");
?>
<!--code doc sua va luu 1 file bat ky-->
		<br />
		<h3>OPEN, EDIT AND SAVE ANY FILE IN LIST FILE OF FOLDER</h3>
		<br />
        <form name="read_form" method="post" action="">
        <textarea name="read_file" cols="110" rows="35" wrap="off">
        </textarea>
        <br />
        <input type="submit" name="update" value="UPDATE" />
        </form>
</body>
</html>

enhzflep

Это мой 1 голос. Я был бы рад (и хотел бы) улучшить его, если бы вопрос был отредактирован таким образом, чтобы это было оправдано.

1) вы просите людей исправить ваш код, прежде чем попросить демонстрацию или документ. Вы не производите на меня впечатления заинтересованного в том, как это работает, просто решение. Я часто ошибаюсь.
2) код, который вы загрузили, представляет собой rar-файл размером 1,1 МБ. Это просто безумие. Это действительно довольно простая задача. Нет абсолютно никакой необходимости в таком большом дампе кода для этой задачи.
3) Вы даже не сказали, где вы застряли, что вы сделали. Вы действительно ожидаете, что люди будут просматривать ваш zip-файл только для того, чтобы попытаться понять, какая у вас проблема?
4) относящийся к (3) - есть 1,1 МБ изображений и 25 КБ кода, в дополнение к 275 КБ не минимизированного jQuery o_O

Вы должны построить минимальный пример, чтобы продемонстрировать проблему, с которой вы столкнулись, и задать вопросы, связанные с этим.

Альтернативой может быть описание того, что вы понимаете как грубые шаги, необходимые для выполнения этой задачи, а также шаги, с которыми у вас возникли проблемы.

Послушайте, мы все когда-то были новичками в этом концерте, но ваш нынешний подход лучше подходит для другого сайта, чем этот.

Конечно, вы можете просто отправить 50 долларов на мой paypal, и я сделаю 60 минут детективной работы над вашим загруженным файлом .rar-тогда вы можете проигнорировать пункты 1-4 этого комментария.

Правка: смотрите здесь предложения о том, как сделать сообщения более вероятными для вас другими: Короткий, Самодостаточный, Правильный (Компилируемый) Пример

Sergey Alexandrovich Kryukov

Отличный ответ. И отличная, самая полезная ссылка.
—СА

enhzflep

Спасибо, и мы будем очень рады. :)

Практика делает совершенным-это всегда так трудно практиковать неизвестный процесс. Эта связь, должно быть, помогла сотням тысяч за последнее десятилетие.

С.

enhzflep

Пара быстрых моментов Эмили Элис:
1) в будущем вы должны отредактировать свой исходный вопрос, чтобы предоставить обновления - не добавляйте обновления в качестве "решения"
2) вы определенно не должны отмечать такое "решение" как "принятое" (или как там это называется) Это приводит к тому, что ваша проблема выглядит как решенная, а это явно не так.
3) пожалуйста, удалите свое "решение" - я обновил ваш оригинальный пост, включив в него код.

2 Ответов

Рейтинг:
1

enhzflep

О, Боже Мой!

Я действительно не знаю, с чего начать это решение. Есть так много проблем с кодом. Но мы не учимся, пока не попробуем. Я считаю, что усилия были проявлены и должны быть вознаграждены некоторыми советами, которые, надеюсь, помогут в будущем.

Во-первых, пара моментов, на которые нужно обратить внимание.

1. Хотя на первый взгляд они могут показаться одинаковыми, PHP трактует одинарные кавычки (') и двойные кавычки (") совершенно по-разному. Если строка заключена в двойные кавычки, имена переменных заменяются значением, которое содержит переменная. В том случае, если строка содержит кавычки, вы можете либо экранировать кавычки, предшествуя им обратной косой чертой, либо использовать другой вид кавычек. Например $someVar = "This is 'easy'."; или $someVar = 'This is \'easy\'.';

echo '$someVar' приведет к совершенно иному результату, чем echo "$someVar";
Первый из них покажет $someVar, в то время как второй покажет This is 'easy'.

- Я внес изменения, которые учитывают эти правила в строках 64 и 65, а также 108-111 вашего кода

2. Вы, кажется, забыли начальный тег для php-кода
- Я добавил его в строку 31 вашего кода


3. Все ячейки TD в вашей таблице были ссылками - вероятно, это не самый лучший способ сделать это. Я удалил ссылку из столбцов type, size и modified. Я также сделал столбце имя _appear_, чтобы быть связующим звеном, с помощью кода CSS. Это делается потому, что в противном случае вы фактически уйдете от своего редактора и в конечном итоге установите имя файла в адресную строку браузера.
Опять же, не совсем то, что вы хотите. - Я добавил правила css .fileLink и .fileLink:hover для управления первым столбцом

4. Я оставил ваш файловый код как есть. Возможно, вы захотите изменить это дальше - вы, вероятно, не хотите, чтобы пользователь нажимал на PNG-файл только для того, чтобы его содержимое появилось в текстовой области. Вы можете решить эту проблему по мере необходимости.

5. Я добавил 2 пролета над текстовой областью с целью хранения имени редактируемого в данный момент файла.

6. Я добавил немного javascript для обработки щелчков мыши по именам файлов в таблице. Это будет использовать ajax для запроса содержимого выбранного файла, вставки его в текстовую область, установки индикатора имени файла на имя файла, который был нажат, и, наконец, установки положения прокрутки страницы на индикатор имени файла, готовый к редактированию.

7а. Я вообще не беспокоился о кнопке обновления, вам нужно будет решить эту проблему самостоятельно. Это прекрасная возможность поближе познакомиться либо с обычной отправкой формы на основе POST, либо с отправкой формы на основе AJAX. Это вам решать. Вам также нужно будет отправить имя передаваемого файла, чтобы сохранить (обновить) его на сервере. Вы можете сделать это с помощью элемента ввода с типом, установленным в hidden, который находится внутри формы. Я поместил один в соответствующее место и прокомментировал его.

7Б. Вам нужно будет иметь что-то, чтобы отправить обновленные данные и имя файла. Просто создайте еще один PHP-файл, который сохранит данные, полученные через $_POST, в файл, указанный скрытым входом.

Во всяком случае, вы можете прочитать больше об объекте xmlHTTPRequest здесь: http://www.w3schools.com/ajax/ajax_xmlhttprequest_send.asp[^]

Наконец, код. Пожалуйста, задавайте вопросы, если они у вас есть. Вопросы, которые требуют понимания того, как создать решение - запросы на решение не будут приветствоваться мной.

<!DOCTYPE html>
<head>
<style>
table
{
    width: 100%;
    padding: 5px 5px 0px 5px;
    text-decoration:none;
}

a
{
    text-decoration:none;
}

h3
{
    padding: 5px 0px 5px 0px;
    color:#000;
}

tr
{
    height: 20px;
}

/*
    make elements with this class appear like a link
    we need to request the filename that these elements contain with ajax, so we _dont_ want a real link.
*/
.fileLink
{
    color: blue;
    cursor: pointer;
}

.fileLink:hover
{
    text-decoration: underline;
}

/* rule for the name of the file currently being edited */
#editingFilename
{
    color: #f90;   /* CP-orange text */
    font-weight: bold;
}
</style>

<script>

function requestUrlWithAjax(url)
{
    var xmlhttp;

    //1. create the xmlhttp object

    if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else
    {// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }

    //2. assign the handler for the onchange event of the object
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            // we arrive here when we have successfully retrieved  the url we asked for
            //1. Set the response text to the text area's value
            document.getElementById('ajaxResultTarget').value = xmlhttp.responseText;

            //2. copy the name of the file retrieved directly above the text-area
            document.getElementById('editingFilename').innerHTML = url;

            //3. set the filename to the hidden input - see line 199
//          document.getElementById('frmFileName').value = url;


            //4. scroll the document down to editingFilename - just above the text-area
            var xPos, yPos, tgtElem;
            tgtElem = document.getElementById('editingFilename');
            xPos = 0;
            yPos = tgtElem.offsetTop;
            window.scrollTo(xPos, yPos);
        }
    }

    //3. specify a GET request for the indicated filename,
    //   set asynchronous to true (dont wait for the send method to complete before continuing)
    xmlhttp.open("GET",url,true);

    //4. make the request
    xmlhttp.send();
}

</script>


</head>

<body>
<!--code show file cua thu muc-->

        <?php echo "<h3>LIST FILE OF FOLDER</h3>";
        // directory
        $dir = "";

        // Opens directory
        $myDirectory=opendir(".");

        // Gets each entry
        while($entryName=readdir($myDirectory))
        {
            $dirArray[]=$entryName;
        }

        // Finds extensions of files
        function findexts ($filename)
        {
            $filename=strtolower($filename);//chuyen sang chu thuong
            $exts=split("[/\\.]", $filename);//cat chuoi
            $n=count($exts)-1;
            $exts=$exts[$n];
            return $exts;
        }

        // Closes directory
        closedir($myDirectory);

        // Counts elements in array
        $indexCount=count($dirArray);

        // Sorts files
        sort($dirArray);

        // Print list content directory
        print("<table border='1' cellpadding='5' cellspacing='0' class='whitelinks'>\n");
        print("<tr><th>Name</th><th>Type</th><th>Size</th><th>Date Modified</th></tr>\n");
        // Loops through the array of files
        for($index=0; $index < $indexCount; $index++)
        {
            if (substr("$dirArray[$index]", 0, 1) != ".")
            {
                //File name
                $name=$dirArray[$index];
                $namehref=$dirArray[$index];

                // Gets File Extensions
                $extn=findexts($dirArray[$index]);

                // File type
                switch ($extn)
                {
                    case "png": $extn="PNG Image"; break;
                    case "jpg": $extn="JPEG Image"; break;
                    case "bmp": $extn="BITMAP Image"; break;
                    case "gif": $extn="GIF Image"; break;
                    case "ico": $extn="Windows Icon"; break;
                    case "txt": $extn="Text File"; break;
                    case "log": $extn="Log File"; break;
                    case "htm": $extn="HTML File"; break;
                    case "php": $extn="PHP Script"; break;
                    case "js": $extn="Javascript"; break;
                    case "css": $extn="Stylesheet"; break;
                    case "pdf": $extn="PDF Document"; break;
                    case "zip": $extn="ZIP Archive"; break;
                    case "docx": $extn="Microsoft Word Document"; break;
                    case "mp3": $extn="MP# Format Sound"; break;
                    default: $extn=strtoupper($extn)." File"; break;
                }

                // Gets file size
                $size=number_format(filesize($dirArray[$index]))."&nbsp"."KB";

                // Gets Date Modified Data
                $modtime=date("M j Y g:i A", filemtime($dirArray[$index]));
                $timekey=date("YmdHis", filemtime($dirArray[$index]));

                print("
                <tr>
                <td class='fileLink' onclick='requestUrlWithAjax(this.innerHTML)'>$name</td>
                <td>$extn</td>
                <td>$size</td>
                <td>$modtime</td>
                </tr>");
            }
        }
        print("</table>\n");
?>
        <br />
        <h3>OPEN, EDIT AND SAVE ANY FILE IN LIST FILE OF FOLDER</h3>
        <span>Current File: </span><span id='editingFilename'></span><br>
        <form name="read_form" method="post" action="">
<!--        <input type='hidden' name='fileName' id='frmFileName'/> -->
        <textarea id='ajaxResultTarget' name="read_


Рейтинг:
1

Member 13382214

Хорошая отладка. Но ваш код не может открывать папки. Он только открывает файлы.


Richard Deeming

Если вы хотите ответить на решение, используйте команду "есть вопрос или комментарий?" кнопка под этим решением.

НЕ опубликуйте свой комментарий как новое "решение"!