{"id":1170,"date":"2014-01-14T12:18:39","date_gmt":"2014-01-14T10:18:39","guid":{"rendered":"http:\/\/xn--okazwoka-bpb.pl\/?p=1170"},"modified":"2014-01-14T12:22:24","modified_gmt":"2014-01-14T10:22:24","slug":"klasa-php-sposob-na-doklejony-kod-do-plikow","status":"publish","type":"post","link":"http:\/\/xn--okazwoka-bpb.pl\/index.php\/2014\/01\/14\/klasa-php-sposob-na-doklejony-kod-do-plikow\/","title":{"rendered":"Klasa PHP &#8211; spos\u00f3b na doklejony kod do plik\u00f3w"},"content":{"rendered":"<p>Czasem si\u0119 zdarza, \u017ce przez dziurawy CMS, wyciek hase\u0142 przez dziury w klientach FTP do wielu plik\u00f3w dokleja si\u0119 z\u0142o\u015bliwy kod (wysy\u0142aj\u0105cy maile, przekierowuj\u0105cy na inne strony etc.). R\u0119czna edycja nie wchodzi w gr\u0119 przy setkach, tysi\u0105cach plik\u00f3w. Podmiana plik\u00f3w na \u015bwie\u017ce cz\u0119sto te\u017c nie wchodzi w gr\u0119 ze wzgl\u0119du na strat\u0119 wprowadzonych zmian b\u0105d\u017a po prostu braku czystych plik\u00f3w \u017ar\u00f3d\u0142owych. Mam rozwi\u0105zanie w postaci prostej, efektywnej klasy PHP!<!--more--><\/p>\n<p>Skrypt jest bardzo prosty, kilka linijek kodu za\u0142atawia spraw\u0119 &#8211; wykonanie przy 3 tysi\u0105cach plik\u00f3w trwa&#8230; 3 sekundy, czyli \u015brednio wydajno\u015b\u0107 1000 plik\u00f3w na sekund\u0119. Wykonanie kodu dla serwera nie jest wielkim wyzwaniem.<\/p>\n<p>GOTOWA KLASA:<\/p>\n<div class=\"codecolorer-container php solarized-light\" style=\"overflow:auto;white-space:nowrap;width:100%;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/><\/div><\/td><td><div class=\"php codecolorer\"><span class=\"kw2\">class<\/span> CzyscPliki<br \/>\n<span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp;<span class=\"kw2\">public<\/span> <span class=\"re0\">$dir<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp;<span class=\"kw2\">public<\/span> <span class=\"re0\">$wyrzuc<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp;<span class=\"kw2\">public<\/span> <span class=\"kw2\">function<\/span> wykonaj<span class=\"br0\">&#40;<\/span><span class=\"re0\">$dir<\/span><span class=\"sy0\">,<\/span><span class=\"re0\">$wyrzuc<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"re0\">$lista_pliki<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw3\">scandir<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$dir<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">echo<\/span> <span class=\"st_h\">'&lt;ol&gt;'<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">foreach<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$lista_pliki<\/span> <span class=\"kw1\">as<\/span> <span class=\"re0\">$plik<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$plik<\/span> <span class=\"sy0\">!=<\/span> <span class=\"st_h\">'.'<\/span> <span class=\"sy0\">&amp;&amp;<\/span> <span class=\"re0\">$plik<\/span> <span class=\"sy0\">!=<\/span> <span class=\"st_h\">'..'<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">echo<\/span> <span class=\"st_h\">'&lt;li&gt;'<\/span> <span class=\"sy0\">.<\/span> <span class=\"re0\">$plik<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">is_dir<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$dir<\/span> <span class=\"sy0\">.<\/span> <span class=\"st_h\">'\/'<\/span> <span class=\"sy0\">.<\/span> <span class=\"re0\">$plik<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">wykonaj<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$dir<\/span> <span class=\"sy0\">.<\/span> <span class=\"st_h\">'\/'<\/span> <span class=\"sy0\">.<\/span> <span class=\"re0\">$plik<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$wyrzuc<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">echo<\/span> <span class=\"st_h\">'&lt;\/li&gt;'<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">podmien<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$dir<\/span> <span class=\"sy0\">.<\/span> <span class=\"st_h\">'\/'<\/span> <span class=\"sy0\">.<\/span> <span class=\"re0\">$plik<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$wyrzuc<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">echo<\/span> <span class=\"st_h\">'&lt;\/ol&gt;'<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp;<span class=\"kw2\">public<\/span> <span class=\"kw2\">function<\/span> podmien <span class=\"br0\">&#40;<\/span><span class=\"re0\">$plik<\/span><span class=\"sy0\">,<\/span><span class=\"re0\">$to_wyrzuc<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$tu<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw3\">file_get_contents<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$plik<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"re0\">$go<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw3\">str_replace<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$to_wyrzuc<\/span><span class=\"sy0\">,<\/span><span class=\"st_h\">''<\/span><span class=\"sy0\">,<\/span><span class=\"re0\">$tu<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw3\">file_put_contents<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$plik<\/span><span class=\"sy0\">,<\/span><span class=\"re0\">$go<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n&nbsp; <br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>Szybki opis: klasa tworzy najpierw list\u0119 wszystkich dost\u0119pnych katalog\u00f3w i plik\u00f3w (oczywi\u015bcie pod\u0105\u017ca w g\u0142\u0105b struktury katalog\u00f3w listuj\u0105c wszystkie pliki). Nast\u0119pnie dla ka\u017cdego pliku wykonuje funkcj\u0119 &#8222;podmie\u0144&#8221; &#8211; zamienia podany ci\u0105g znak\u00f3w na pusty i zapisuje zmieniony plik. Jedym s\u0142owem usuwa z\u0142o\u015bliwy kod.<\/p>\n<p>Wykorzystanie klasy:<\/p>\n<div class=\"codecolorer-container php solarized-light\" style=\"overflow:auto;white-space:nowrap;width:100%;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/><\/div><\/td><td><div class=\"php codecolorer\"><span class=\"re0\">$wywal<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw2\">new<\/span> CzyscPliki<span class=\"sy0\">;<\/span><br \/>\n<span class=\"re0\">$wywal<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">wykonaj<\/span><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'.'<\/span><span class=\"sy0\">,<\/span><span class=\"st_h\">'&lt;?php echo \/'<\/span>Jestem z\u0142o\u015bliwym kodem<span class=\"sy0\">!\/<\/span><span class=\"st_h\">'; ?&gt;'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>Pierwszym argumentem jest \u015bcie\u017cka od kt\u00f3rej ma si\u0119 rozpocz\u0105\u0107 listowanie plik\u00f3w. Kropka oznacza, \u017ce listowanie ma si\u0119 zacz\u0105\u0107 od katalogu, w kt\u00f3rym znajduje si\u0119 plik z wywo\u0142aniem klasy. Mo\u017cna dowolnie zmieni\u0107 ten argument na katalog np.:<\/p>\n<div class=\"codecolorer-container php solarized-light\" style=\"overflow:auto;white-space:nowrap;width:100%;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/><\/div><\/td><td><div class=\"php codecolorer\"><span class=\"re0\">$wywal<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw2\">new<\/span> CzyscPliki<span class=\"sy0\">;<\/span><br \/>\n<span class=\"re0\">$wywal<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">wykonaj<\/span><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'wp-content\/themes'<\/span><span class=\"sy0\">,<\/span><span class=\"st_h\">'&lt;?php echo \/'<\/span>Jestem z\u0142o\u015bliwym kodem<span class=\"sy0\">!\/<\/span><span class=\"st_h\">'; ?&gt;'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>Drugi argument to kod, kt\u00f3ry zostanie usuni\u0119ty. Pami\u0119taj, aby wszystkie znaki apostrofu z\u0142o\u015bliwego kodu (&#8217;) poprzedzi\u0107 w argumencie backslashem: (\\)  &#8211; dok\u0142adnie tak jak na przyk\u0142azie. W przeciwym wypadku kod PHP nie b\u0119dzie si\u0119 wykonywa\u0142 (b\u0142\u0105d sk\u0142adni). Mo\u017cna \u0142atwo podmieni\u0107 wszystkie wyst\u0119puj\u0105ce znaki apostrofu na przyk\u0142ad programem notepad++.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Czasem si\u0119 zdarza, \u017ce przez dziurawy CMS, wyciek hase\u0142 przez dziury w klientach FTP do wielu plik\u00f3w dokleja&#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[190],"tags":[219],"_links":{"self":[{"href":"http:\/\/xn--okazwoka-bpb.pl\/index.php\/wp-json\/wp\/v2\/posts\/1170"}],"collection":[{"href":"http:\/\/xn--okazwoka-bpb.pl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/xn--okazwoka-bpb.pl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/xn--okazwoka-bpb.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/xn--okazwoka-bpb.pl\/index.php\/wp-json\/wp\/v2\/comments?post=1170"}],"version-history":[{"count":10,"href":"http:\/\/xn--okazwoka-bpb.pl\/index.php\/wp-json\/wp\/v2\/posts\/1170\/revisions"}],"predecessor-version":[{"id":1180,"href":"http:\/\/xn--okazwoka-bpb.pl\/index.php\/wp-json\/wp\/v2\/posts\/1170\/revisions\/1180"}],"wp:attachment":[{"href":"http:\/\/xn--okazwoka-bpb.pl\/index.php\/wp-json\/wp\/v2\/media?parent=1170"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/xn--okazwoka-bpb.pl\/index.php\/wp-json\/wp\/v2\/categories?post=1170"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/xn--okazwoka-bpb.pl\/index.php\/wp-json\/wp\/v2\/tags?post=1170"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}