Pokazanie informacji o konieczności poczekania podczas pracy skryptu.

0

Cześć.

Moje boje z PHP ciąg dalszy. Prośba do bardziej ogarniętych o podpowiedzi. Ponieważ jak sam zaczne grzebać za bardzo w skrypcie poniżej, to tylko bardziej namieszam i później nie odkręcę. Będę musiał przywracać kod bez zmian. Otóż poniższy skrypt działą i wygląda jak chcę. Nie jest to może idealny kod, ale jak na drugi pisany od zera skrypt PHP w życiu chyba nie jest najgorzej ;)

Tylko jedną rzecz chciałbym poprawić/dodać. Mianowicie w momencie kiedy skrypt po kliknięciu na button nie stwierdzi żądnych błędów w id i zacznie odczytywać stronę oraz parsować z niej linki to fajnie żeby na ten czas pokazał się tekst typu "Please wait" zamiast całej zawartości strony. A po skończeniu pracy pokazała się taka strona z wynikami jak dzieje się to teraz. Wiem, że są też chyba jakieś możłiwości dodania animowanego "kółeczka" a'la buforowanie na filmików na YouTube czy tam progressbarów ala styl marque z Windows. Ale pewnie to cięzkie do ogarnięcia. Chociaż są chyba strony, które to umożliwiają do ogarnięcia w jednym pliku.

Z góry dziękuję za przykładowe kody. I przepraszam, zę męcze Was z tym PHPem, ale kiedy ktoś męczy nas ogarniających Delphi z banałami, staramy się nie oponować jeśli pokaże co próbował robić sam. Ja dodam, że próbowałem tutaj wstawiać jakieś teksty, ale zawartość strony i tak cały czas jest niestety widoczna. Pewnie trzeba by przeorganizowac obsługę tego form, ale z braku dostatecznej wiedzy o PHP i HTML'u nie za bardzo wiem jak.

<?php
$Max_Chars_Count  = 100;
$http_prefix      = "http://";
$desturl          = $_POST["LogSiteUrl"];
$validurl         = "xbmclogs.com/show.php?id=";
$pastenotexistmsg = "The paste you are looking for does not exist";
$sitetitle        = "Get urls from XMBC log file at xbmclogs.com site (C) olesio";
<title>
echo $sitetitle;
?>
</title>
</head>
<body>
<form method="post" action="<?php
echo $_SERVER["PHP_SELF"];
?>">
<b>Please paste your XBMC log file site url below.</b>
<br>
You can also type only log file id or log site url without "http://" prefix.
<br>
<br>
<br>
<input type="text" name="LogSiteUrl" size="48" value="<?php
echo $desturl;
?>" />
<br>
<br>
<br>
<input type="submit" name="GetUrlsFromLogFile"
value="Get opened urls from log file at xbmclogs.com site"/>
</form>
</body>
<?php
if (isset($_POST["GetUrlsFromLogFile"])) {
    $desturl = str_replace($http_prefix, "", $desturl);
    $desturl = str_replace($validurl, "", $desturl);
    $logid   = $desturl;
    if (!is_numeric($logid)) {
        echo "<font color=red>" . "ERROR: \"$logid\" is not a valid log id number!" . "</font><br><br>";
    } else {
        $desturl     = $http_prefix . $validurl . $logid;
        $pagecontent = file_get_contents($desturl);
        $notexist    = strpos($pagecontent, $pastenotexistmsg);
        if ($notexist) {
            echo $pastenotexistmsg . "<br><br>";
        } else {
            preg_match_all("/Opening: (.+)<\/div>/", $pagecontent, $matches, PREG_SET_ORDER);
            foreach ($matches as $val) {
                $string          = $val[1];
                $patterns        = array();
                $patterns[0]     = '/<span[^>]+\>/i';
                $patterns[1]     = '/<\/span>/';
                $replacements    = array();
                $replacements[0] = '';
                $replacements[1] = '';
                $validurl        = preg_replace($patterns, $replacements, $string);
                if (strlen($validurl) <= $Max_Chars_Count) {
                    $linktext = $validurl;
                } else {
                    $linktext = substr($validurl, 0, $Max_Chars_Count) . "(...)";
                }
                echo '<a href="' . $validurl . '" target="_blank">' . $linktext . '</a><br><br>';
            }
            if (count($matches) == 0) {
                echo 'No links found in log file.<br><br>';
            } else {
                if (count($matches) == 1) {
                    echo 'Found ' . count($matches) . ' link.<br><br>';
                } else {
                    echo 'Found ' . count($matches) . ' links.<br><br>';
                }
            }
        }
    }
}
?>
0

Takie coś to raczej musisz załatwić za pomocą ajaxa a nie w php. Tzn całą tą swoją akcję będziesz musiał wywołać asynchronicznie.
http://api.jquery.com/jQuery.ajax/

0

Skrypt PHP zawsze wykonuje się po stronie serwera :)

0

Ok, dziękuję za odpowiedzi. Ueee, ale skoro to tyle kombinacji i trzeba wytaczać jakieś "zewnętrzne armaty" do "ubicia wróbla". A skrypt nie wykonuje się aż tak długo. I tak glownie ja sobie z niego korzystam. Chyba, że ktoś ma ochotę i potrzebuje to może go sobie postawić u siebie i używac, jeśli taka wola. To nie będę kombinował. Bo Są jakieś porady na google o PHP i postępach, gdzie używa się JS do odświeżania diva i takie tam kombinacje, ale to za dużo modzenia jak dla mnie. Po porstu ja wiem, że i tak muszę chwilę poczekać. Tylko chciałem dopracować te rozwązanie. Chyba, że to coś w ten deseń jak na zaakceptowanej odpowiedzi w wątku poniżej? To może bym to jakoś zaadaptował u siebie: http://stackoverflow.com/questions/14468419/use-ajax-to-show-progress-of-a-php-script-called-by-another-ajax-request - jeżeli tak to może wyglądać i się u mnie sprawdzi.

0

Ale to nie jest takie trudne, zawsze mógł byś poszerzyć swoje horyzonty o podstawy JS i AJAX-a :)

0

No ok. Na podstawie http://blog.code-head.com/ajax-beginner-ajax-tutorial-display-a-progress-bar-or-a-loading-message mam taki skrypt jak poniżej. Na testowej stronie pokazuje mi on "Hello World" po jakiejś sekundzie. Jednak po wklejeniu skryptu i odpaleniu na serwerze kółeczko kręci się ciągle. Niesety nie wiem, jak na próbę coś wyświetlić i jak połaczyć to z moim skryptem, żeby miało ręce i nogi. Efekt wizualny jest ok. Może pokazywać się pod buttonem i takie kółeczko na czas pracy skryptu.

<html>
<head>
<title>Beginner AJAX Tutorial - Progress Bar</title>
	
	<script language="javascript" type="text/javascript" src="yahoo.js"> </script>
	<script language="javascript" type="text/javascript" src="event.js"> </script>
	<script language="javascript" type="text/javascript" src="connection.js"> </script>
	
	<script language="javascript" type="text/javascript">
		function success_handler(o) {
			replace_html('content', o.responseText);
		}
		
		function failure_handler(o) {
			replace_html('content', 'Server or your connection is death');
		}
		
		function replace_html(id, content) {
			document.getElementById(id).innerHTML = content;
		}
		
		function show_progressbar(id) {
			replace_html(id, '<img src="http://images.code-head.com/progress-bars/4.gif" border="0" alt="Loading, please wait..." />');
		}
		
		function send_request() {
			show_progressbar('content');
			var callback = { success:success_handler,	failure:failure_handler, timeout: 10000 };
			YAHOO.util.Connect.asyncRequest('GET', 'http://images.code-head.com/tutorials/ajax/beginner-ajax-tutorial.php', callback);
		}
		
		function test_failure() {
			show_progressbar('content');
			var callback = { success:success_handler,	failure:failure_handler, timeout: 10000 };
			YAHOO.util.Connect.asyncRequest('GET', 'http://images.code-head.com/tutorials/ajax/some-file-that-doesnt-exists.php', callback);
		}
		
		var progress_bar = new Image();
		progress_bar.src = 'http://images.code-head.com/progress-bars/4.gif';
	</script>
	
</head>

<body>
<a href="javascript:send_request();">Send Request</a> | <a href="javascript:test_failure();">Fail a request</a>
<div id="content">

</div>
</body>
</html>

1 użytkowników online, w tym zalogowanych: 0, gości: 1