Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Jak usunac oznaczenia poprzedniego katalogu?
Forum PHP.pl > Forum > Przedszkole
konradkw
Witam!
Napisaem taki kodzik may który dziaa wietnie ale w rezultacie otrzymujé oznaczenia powrotu do poprzedniego katalogu czyli (..) oraz (.) u samej góry listy plików w katalogu. Czy moliwym jest zmieni to tak abym mia tylko listé bez moliwoci powrotu do katalogu wyzej?

  1. <?php
  2. $folder = dir('gazeta/numer');
  3. echo '<ul>';
  4. while($plik = $folder->read())
  5. echo '<li><a href="gazeta/numer/' .$plik. '">' .$plik. '</a></li>';
  6. echo '</ul>';
  7. $folder->close();
  8. ?>


serdecznie dziekuje i pozdrawiam!
Sephirus
  1. <?php
  2. $folder = dir('gazeta/numer');
  3. echo '<ul>';
  4. while($plik = $folder->read()) {
  5. if($plik != '.' && $plik != '..') echo '<li><a href="gazeta/numer/' .$plik. '">' .$plik. '</a></li>';
  6. }
  7. echo '</ul>';
  8. $folder->close();
  9. ?>
konradkw
powinienem nadmienic ze to jest kod uzyty w joomla na pluginie DirectPHP ktory pozwala na uzycie php bezposrednio w edycji artykulu.

Efektem kodu od Sephirus jest:

  1. Parse error: syntax error, unexpected '<' in /home/morpheus/ftp/rajcza/plugins/content/DirectPHP/DirectPHP.php(58) : eval()'d code on line 1


Co nie bardzo ma sens ...
Teoretycznie wszystko dziala na PHP serwera jak i reszta moich programow ale w tym wypadku ma z jakiegos powodu problem ze znacznikiem <?php widzicie w tym sens? (wczesniej dzialalo - patrz pierwszy post)
Sephirus
Ok to jest bardzo dziwne smile.gif Dodałem tylko tego IFa tongue.gif hmm... pokaż tą linijkę 58 z DirectPHP.php
konradkw
Większa część kodu z DirectPHP.php - żeby miało to sens:

  1. $php_start = "<?php";
  2. $php_end = "?>";
  3. $contents = $article->text;
  4. $contents = $this->fix_str($contents);
  5. $output = "";
  6. $regexp = '/(.*?)'.$this->fix_reg($php_start).'\s+(.*?)'.$this->fix_reg($php_end).'(.*)/s';
  7. $found = preg_match($regexp, $contents, $matches);
  8. while ($found) {
  9. $output .= $matches[1];
  10. $phpcode = $matches[2];
  11. #$phpcode2 = $this->fix_str2($phpcode);
  12. global $errmsg;
  13. if ($this->check_php($phpcode)) {
  14. ob_start();
  15. if ($using_no_editor) {
  16. eval($phpcode);
  17. } else {
  18. eval($this->fix_str2($phpcode));
  19. }
  20. $output .= ob_get_contents();
  21. ob_end_clean();
  22. } else {
  23. $output .= "The following command is not allowed: <b>$errmsg</b>";
  24. }
  25. $contents = $matches[3];
  26. $found = preg_match($regexp, $contents, $matches);
  27. }
  28. $output .= $contents;
  29. $article->text = $output;
  30. return true;
  31. }


a Tutaj linijka 58:

  1. eval($this->fix_str2($phpcode));


tak na marginesie - może macie pomysł jak wylistować pliki w katalogu inaczej? - najlepiej wg daty dodania do katalogu? Druga sprawa to odcięcie typu pliku od nazwy - czyli jak plik się nazywa abc.pdf to chciałbym uzyskać nazwę: abc

Z góry dziękuję i pozdrawiam!
Sephirus
Ok ten kod to jednak mało by w 100% określić w czym problem...

Co do kolejnych pytań to zapoznaj się z klasą DirectoryIterator - pozwala sprawniej wylistować zawartość katalogu.
konradkw
Zamieszczam cały plik DirectPHP.php

  1. <?php
  2. /**
  3. * DirectPHP plugin
  4. * allows direct embedding of PHP commands
  5. * right inside Joomla content page for dynamic contents
  6. * Author: kksou
  7. * Copyright (C) 2006-2011. kksou.com. All Rights Reserved
  8. * License: GNU/GPL <a href="http://www.gnu.org/copyleft/gpl.html" target="_blank">http://www.gnu.org/copyleft/gpl.html</a>
  9. * Website: <a href="http://www.kksou.com/php-gtk2" target="_blank">http://www.kksou.com/php-gtk2</a>
  10. * v1.5 March 26, 2008
  11. * v1.5.3 May 12, 2008
  12. * v1.5.4 June 21, 2008
  13. * v1.5.6 Apr 8, 2009 added using_no_editor in parameter
  14. * v1.6 Feb 21, 2011 support for Joomla 1.6
  15. * v1.7 Oct 10, 2011 support for Joomla 1.7
  16. * v2.5 Jan 25, 2012 support for Joomla 2.5
  17. */
  18.  
  19. defined( '_JEXEC' ) or die( 'Direct Access to this location is not allowed.' );
  20.  
  21. jimport( 'joomla.event.plugin' );
  22.  
  23. class plgContentDirectPHP extends JPlugin {
  24.  
  25. function plgContentDirectPHP( &$subject, $params ) {
  26. parent::__construct( $subject, $params );
  27. }
  28.  
  29. function onContentPrepare( $context, &$article, &$params, $limitstart=0 ) {
  30. global $mainframe;
  31. global $enable_command_block, $block_list;
  32. #$plugin =& JPluginHelper::getPlugin('content', 'DirectPHP');
  33. $pluginParams = $this->params;
  34. $using_no_editor = $pluginParams->get('using_no_editor');
  35. $enable_command_block = $pluginParams->get('enable_command_block');
  36. $block_list = $pluginParams->get('block_list');
  37.  
  38. $block_list = preg_replace('/\s*/s', '', $block_list);
  39. $block_list = explode(',', $block_list);
  40.  
  41. $php_start = "<?php";
  42. $php_end = "?>";
  43. $contents = $article->text;
  44. $contents = $this->fix_str($contents);
  45. $output = "";
  46. $regexp = '/(.*?)'.$this->fix_reg($php_start).'\s+(.*?)'.$this->fix_reg($php_end).'(.*)/s';
  47. $found = preg_match($regexp, $contents, $matches);
  48. while ($found) {
  49. $output .= $matches[1];
  50. $phpcode = $matches[2];
  51. #$phpcode2 = $this->fix_str2($phpcode);
  52. global $errmsg;
  53. if ($this->check_php($phpcode)) {
  54. if ($using_no_editor) {
  55. eval($phpcode);
  56. } else {
  57. eval($this->fix_str2($phpcode));
  58. }
  59. $output .= ob_get_contents();
  60. } else {
  61. $output .= "The following command is not allowed: <b>$errmsg</b>";
  62. }
  63. $contents = $matches[3];
  64. $found = preg_match($regexp, $contents, $matches);
  65. }
  66. $output .= $contents;
  67. $article->text = $output;
  68. return true;
  69. }
  70.  
  71. function fix_str($str) {
  72. $str = str_replace('{?php', '<?php', $str);
  73. $str = str_replace('?}', '?>', $str);
  74. $str = preg_replace(array('%&lt;\?php(\s|&nbsp;|<br\s/>|<br>|<p>|</p>)%s', '/\?&gt;/s', '/-&gt;/'), array('<?php ', '?>', '->'), $str);
  75. return $str;
  76. }
  77.  
  78. function fix_str2($str) {
  79. $str = str_replace('<br>', "\n", $str);
  80. $str = str_replace('<br />', "\n", $str);
  81. $str = str_replace('<p>', "\n", $str);
  82. $str = str_replace('</p>', "\n", $str);
  83. $str = str_replace(''', "'", $str);
  84. $str = str_replace('&quot;', '"', $str);
  85. $str = str_replace('&lt;', '<', $str);
  86. $str = str_replace('&gt;', '>', $str);
  87. $str = str_replace('&amp;', '&', $str);
  88. $str = str_replace('&nbsp;', ' ', $str);
  89. $str = str_replace(' ', "\t", $str);
  90. $str = str_replace(chr(hexdec('C2')).chr(hexdec('A0')), '', $str);
  91. $str = str_replace(html_entity_decode("&Acirc;&nbsp;"), '', $str);
  92. return $str;
  93. }
  94.  
  95. function fix_reg($str) {
  96. $str = str_replace('?', '\?', $str);
  97. $str = str_replace('{', '\{', $str);
  98. $str = str_replace('}', '\}', $str);
  99. return $str;
  100. }
  101.  
  102. function check_php($code) {
  103. global $enable_command_block, $block_list, $errmsg;
  104. $status = 1;
  105. if (!$enable_command_block) return $status;
  106. $function_list = array();
  107. if (preg_match_all('/([a-zA-Z0-9_]+)\s*[(|"|\']/s', $code, $matches)) {
  108. $function_list = $matches[1];
  109. }
  110.  
  111. if (preg_match('/`(.*?)`/s', $code)) {
  112. $status = 0;
  113. $errmsg = 'backticks (``)';
  114. return $status;
  115. }
  116. if (preg_match('/\$database\s*->\s*([a-zA-Z0-9_]+)\s*[(|"|\']/s', $code, $matches)) {
  117. $status = 0;
  118. $errmsg = 'database->'.$matches[1];
  119. return $status;
  120. }
  121. foreach($function_list as $command) {
  122. if (in_array($command, $block_list)) {
  123. $status = 0;
  124. $errmsg = $command;
  125. break;
  126. }
  127. }
  128. return $status;
  129. }
  130.  
  131. }
  132.  
  133. ?>


Zapoznam się z tym co pisałeś ale ciekawi mnie czy dało by się coś zrobić z tym błędem który się pokazuje (może się w przyszłości pokazywać też ...

znalazłem jeszcze taki skrypt - in w miarę działa ... :
  1. <?php
  2. $directory="numery/";
  3. $dir=opendir($directory);
  4. $file_list="<UL>";
  5. while($file_name=readdir($dir))
  6. {
  7. if(($file_name!=".")&&($file_name!=".."))
  8. {
  9. $file_list.="<LI>$file_name";
  10. }
  11. }
  12. $file_list.="</UL>";
  13. closedir($dir);
  14. Pliki w $directory:
  15. $file_list";
  16. ?>
Sephirus
Czy możesz zrobić coś takiego:

w linii 58 zamiast

  1. eval($this->fix_str2($phpcode));


dać:

  1. echo $phpcode;


i przekleić dokładnie to co wypluł?

EDIT:

To może i tak zadziała:

  1. <?php
  2. $folder = dir('gazeta/numer');
  3. echo '<ul>';
  4. while($plik = $folder->read()) {
  5. if(($plik!='.')&&($plik!='..')) echo '<li><a href="gazeta/numer/' .$plik. '">' .$plik. '</a></li>';
  6. }
  7. echo '</ul>';
  8. $folder->close();
  9. ?>
konradkw
uzylem tego ostatniego co pisalem i zmienilem linijke 58 tak jak mówiłeś i mam znomu to:

  1. Parse error: syntax error, unexpected '<' in /home/morpheus/ftp/rajcza/plugins/content/DirectPHP/DirectPHP.php(58) : eval()'d code on line 1
Sephirus
Coś chyba źle podmieniłeś bo błędu nie powinno być tylko powinien coś wyświetlić :/ Chyba że nie usunąłeś tego "eval(..." :/
konradkw
nie rozumiem jak to możliwe że debuguje kod i zatrzymuje się na znaczniku <?php - próbowałem nawet bez tych znaczników żeby sprawdzić czy czasem nei ma wbudowanego rozpoznania kodu bez znaczników początkowych i koncowych ale nadal nic sad.gif

zamieszczam kod po zmianie:

  1. <?php
  2. /**
  3. * DirectPHP plugin
  4. * allows direct embedding of PHP commands
  5. * right inside Joomla content page for dynamic contents
  6. * Author: kksou
  7. * Copyright (C) 2006-2011. kksou.com. All Rights Reserved
  8. * License: GNU/GPL <a href="http://www.gnu.org/copyleft/gpl.html" target="_blank">http://www.gnu.org/copyleft/gpl.html</a>
  9. * Website: <a href="http://www.kksou.com/php-gtk2" target="_blank">http://www.kksou.com/php-gtk2</a>
  10. * v1.5 March 26, 2008
  11. * v1.5.3 May 12, 2008
  12. * v1.5.4 June 21, 2008
  13. * v1.5.6 Apr 8, 2009 added using_no_editor in parameter
  14. * v1.6 Feb 21, 2011 support for Joomla 1.6
  15. * v1.7 Oct 10, 2011 support for Joomla 1.7
  16. * v2.5 Jan 25, 2012 support for Joomla 2.5
  17. */
  18.  
  19. defined( '_JEXEC' ) or die( 'Direct Access to this location is not allowed.' );
  20.  
  21. jimport( 'joomla.event.plugin' );
  22.  
  23. class plgContentDirectPHP extends JPlugin {
  24.  
  25. function plgContentDirectPHP( &$subject, $params ) {
  26. parent::__construct( $subject, $params );
  27. }
  28.  
  29. function onContentPrepare( $context, &$article, &$params, $limitstart=0 ) {
  30. global $mainframe;
  31. global $enable_command_block, $block_list;
  32. #$plugin =& JPluginHelper::getPlugin('content', 'DirectPHP');
  33. $pluginParams = $this->params;
  34. $using_no_editor = $pluginParams->get('using_no_editor');
  35. $enable_command_block = $pluginParams->get('enable_command_block');
  36. $block_list = $pluginParams->get('block_list');
  37.  
  38. $block_list = preg_replace('/\s*/s', '', $block_list);
  39. $block_list = explode(',', $block_list);
  40.  
  41. $php_start = "<?php";
  42. $php_end = "?>";
  43. $contents = $article->text;
  44. $contents = $this->fix_str($contents);
  45. $output = "";
  46. $regexp = '/(.*?)'.$this->fix_reg($php_start).'\s+(.*?)'.$this->fix_reg($php_end).'(.*)/s';
  47. $found = preg_match($regexp, $contents, $matches);
  48. while ($found) {
  49. $output .= $matches[1];
  50. $phpcode = $matches[2];
  51. #$phpcode2 = $this->fix_str2($phpcode);
  52. global $errmsg;
  53. if ($this->check_php($phpcode)) {
  54. if ($using_no_editor) {
  55. eval($phpcode);
  56. } else {
  57. echo $phpcode;
  58. die; }
  59. $output .= ob_get_contents();
  60. } else {
  61. $output .= "The following command is not allowed: <b>$errmsg</b>";
  62. }
  63. $contents = $matches[3];
  64. $found = preg_match($regexp, $contents, $matches);
  65. }
  66. $output .= $contents;
  67. $article->text = $output;
  68. return true;
  69. }
  70.  
  71. function fix_str($str) {
  72. $str = str_replace('{?php', '<?php', $str);
  73. $str = str_replace('?}', '?>', $str);
  74. $str = preg_replace(array('%&lt;\?php(\s|&nbsp;|<br\s/>|<br>|<p>|</p>)%s', '/\?&gt;/s', '/-&gt;/'), array('<?php ', '?>', '->'), $str);
  75. return $str;
  76. }
  77.  
  78. function fix_str2($str) {
  79. $str = str_replace('<br>', "\n", $str);
  80. $str = str_replace('<br />', "\n", $str);
  81. $str = str_replace('<p>', "\n", $str);
  82. $str = str_replace('</p>', "\n", $str);
  83. $str = str_replace(''', "'", $str);
  84. $str = str_replace('&quot;', '"', $str);
  85. $str = str_replace('&lt;', '<', $str);
  86. $str = str_replace('&gt;', '>', $str);
  87. $str = str_replace('&amp;', '&', $str);
  88. $str = str_replace('&nbsp;', ' ', $str);
  89. $str = str_replace(' ', "\t", $str);
  90. $str = str_replace(chr(hexdec('C2')).chr(hexdec('A0')), '', $str);
  91. $str = str_replace(html_entity_decode("&Acirc;&nbsp;"), '', $str);
  92. return $str;
  93. }
  94.  
  95. function fix_reg($str) {
  96. $str = str_replace('?', '\?', $str);
  97. $str = str_replace('{', '\{', $str);
  98. $str = str_replace('}', '\}', $str);
  99. return $str;
  100. }
  101.  
  102. function check_php($code) {
  103. global $enable_command_block, $block_list, $errmsg;
  104. $status = 1;
  105. if (!$enable_command_block) return $status;
  106. $function_list = array();
  107. if (preg_match_all('/([a-zA-Z0-9_]+)\s*[(|"|\']/s', $code, $matches)) {
  108. $function_list = $matches[1];
  109. }
  110.  
  111. if (preg_match('/`(.*?)`/s', $code)) {
  112. $status = 0;
  113. $errmsg = 'backticks (``)';
  114. return $status;
  115. }
  116. if (preg_match('/\$database\s*->\s*([a-zA-Z0-9_]+)\s*[(|"|\']/s', $code, $matches)) {
  117. $status = 0;
  118. $errmsg = 'database->'.$matches[1];
  119. return $status;
  120. }
  121. foreach($function_list as $command) {
  122. if (in_array($command, $block_list)) {
  123. $status = 0;
  124. $errmsg = $command;
  125. break;
  126. }
  127. }
  128. return $status;
  129. }
  130.  
  131. }
  132.  
  133. ?>
Sephirus
Kurcze ... To jest mocniej pokićkane... proponuje olać próby debugowania i zrobić tak:

Ten kod po mojej zmianie przestał działać (ten pierwszy) - trzeba pokombinować inaczej go zapisać. Ten parser z DirectPHP się w tym gubi widać.

Próbowałeś ten drugi kod który Ci podałem? nieco się różniący?

  1. <?php
  2. $folder = dir('gazeta/numer');
  3. echo '<ul>';
  4. while($plik = $folder->read()) if(($plik!='.')&&($plik!='..')) echo '<li><a href="gazeta/numer/' .$plik. '">' .$plik. '</a></li>';
  5. echo '</ul>';
  6. $folder->close();
  7. ?>
konradkw
ja serio nie rozumiem co się dzieje - wczesniej uzylem tego kodu co dales teraz i nie dzialalo a teraz nagle dziala .. - boję się go teraz edytować żeby się znou nie posrało a chciałbym usunąć jeszcze rozszezenie pliku z nazwy ..

chyba znalazłem powód czemu się rombie - formatowanie tekstu w joomla - jeśli przeposzczę kod przez notatnik żeby zgubić całkiem formatowanie tekstu to chyba chwyta go a jak piszę bezpośrednio w joomli to wywala błąd .. ciekawe czy to rzeczywiście to ...

no i jeszcze co z sortowaniem - dało by się je posortować jakoś? najlepiej było by wg daty dodania do folderu ... czy może one się automatycznie sortują.. ?

już sprawdziłem że się sortuje automatycznie ale nie rozumiem wg jakich kryteriów, zamieszczam listę plików posortowaną przez skrypt dodawanych chronologicznie do folderu.

29 kwietnia 2012 roku Tygodnik Parafii w Rajczy Rok XVI 18 (818).pdf
13 maja 2012 roku Tygodnik Parafii w Rajczy Rok XVI 20 (820).pdf
20 maja 2012 roku Tygodnik Parafii w Rajczy Rok XVI 21 (821).pdf
3 czerwca 2012 roku Tygodnik Parafii w Rajczy Rok XVI 23 (823).pdf
27 maja 2012 roku Tygodnik Parafii w Rajczy Rok XVI 22 (822).pdf
6 maja 2012 roku Tygodnik Parafii w Rajczy Rok XVI 19 (819).pdf

bardzo by mi zalezałoi żeby je posortować albo wg daty dodania do folderu albo jeślui to prostrze to wg numeru wydania czyli np: 18 (818) - moze byc tylko wg jednej z liczb - nie mam tez nic przeciwko żeby nazwać pliki inaczej - żeby numery były na początku .. ale ogólnie mi zależy żeby najnowsze numery wyświetliły się u góry...
Sephirus
Najprościej było by dać jakoś tak:

  1. $di=new DirectoryIterator('gazeta/numer');
  2. echo '<ul>';
  3. $files = array();
  4. foreach($di AS $file) {
  5. if(!$file->isDot()) $files[] = array($file->getMTime(),$file->getBasename(),$file->getFilename());
  6. }
  7. function cmp($a, $b) {
  8. if($a[0] == $b[0]) return 0;
  9. return ($a[0] < $b[0]) ? -1 : 1;
  10. }
  11. usort($files,'cmp');
  12. foreach($files AS $f) {
  13. echo '<li><a href="gazeta/numer/' .$file[2]. '">' .$file[1]. '</a></li>';
  14. }
  15. echo '</ul>';
  16.  


Ale formatujesz to sam by działało ;P
konradkw
  1. Fatal error: Cannot use object of type DirectoryIterator as array in /home/morpheus/ftp/rajcza/plugins/content/DirectPHP/DirectPHP.php(58) : eval()'d code on line 43


smile.gif a jakoś inaczej się da? smile.gif
Sephirus
Mój błąd:

  1. $di=new DirectoryIterator('gazeta/numer');
  2. echo '<ul>';
  3. $files = array();
  4. foreach($di AS $file) {
  5. if(!$file->isDot()) $files[] = array($file->getMTime(),$file->getBasename(),$file->getFilename());
  6. }
  7. function cmp($a, $b) {
  8. if($a[0] == $b[0]) return 0;
  9. return ($a[0] < $b[0]) ? -1 : 1;
  10. }
  11. usort($files,'cmp');
  12. foreach($files AS $f) {
  13. echo '<li><a href="gazeta/numer/' .$f[2]. '">' .$f[1]. '</a></li>';
  14. }
  15. echo '</ul>';
konradkw
BRAWO!!

Działa świetnie! dziękuję uprzejmie! serdecznie pozdrawiam!

można jeszcze podpowiedź jak wywalić rozszerzenie pliku?
Sephirus
Znowu mój błąd haha.gif źle sprawdziłem w manualu tongue.gif

  1. // zamień:
  2. if(!$file->isDot()) $files[] = array($file->getMTime(),$file->getBasename(),$file->getFilename());
  3. // na:
  4. if(!$file->isDot()) $files[] = array($file->getMTime(),$file->getBasename('.'.$file->getExtension()),$file->getFilename());


$f[2] - to pełna nazwa pliku
$f[1] - to nazwa bez rozszerzenia

EDIT: Nie dawaj mi "pomógł" za każdym razem - RAZ wystarczy smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.