You are here: PSPad forum > České diskuzní fórum > Jak najít podezřelý znak?
Posted by: 4ever | Date: 2016-03-08 02:31 | IP: IP Logged
Zabývám se programováním v php (amatérsky) a v minulosti jakož i opět jsem se setkal se zvláštním problémem. Nevím jestli něco víte o tom jak pracuje server, parser a odesílání hlaviček a tak. Jde o to že člověk inkluduje celu řadu souborů. Často se používají šablony a střídá se kód php a html. Abych to zkrátil. Snažím se najít chybu která je někde v jednom z mnoha souborů, jenže protože nemám vývojářské prostředí tak to není taková hračka jak v IDE pro C/C++. Ta chyba je pouhým okem neviditelná. Někde v kódu je nejspíš znak pouhým okem neviditelný (možná BOM nebo to bude pouhý mezera, nevím). Mno a mě napadlo jestli neexistuje způsob jak takový nestandardní znak najít (ale nevím zda je to BOM protože nevím co tu chybu vyvolává, ale syntaxe kódu by měla být správná, jen je to prd platné pokud se někde vyskytuje neplatný znak který se tam dostal nevím jak). V minulosti šlo o to že program kopíroval script php, který se spouštěl a v tom skriptu byl ten skrytý špatný znak který způsobil, že se php kód nezpracoval ale normálně vytisknul. Předpokládám že se mi tam někde dostal nesprávný (kód jsem psal na novější verzi serveru a PHP a po přejítí na starší verzi serveru/php/mysql se tato chyba objevila). Tak by mě tedy zajímalo zda je způsob jak to vyhledat. Hledat neobvyklé znaky v souborech. Také najít soubory které nemají kódování UTF8 jestli někde není omylem nastavené špatné kódování.
Edited 1 time(s). Last edit at 2016-03-08 02:33 by 4ever.
Posted by: pspad | Date: 2016-03-08 05:55 | IP: IP Logged
Pokud ma byt soubor v UTF-8, otevrete jej v PSPadu a PSPad jej v UTF-8 neotevre a otevre jej v ANSI, znamena to, ze je tam neco spatne.
Jinak by slo hledat pres regularni vyrazy nejakou mnozinu znaku, ale to byste musel vedet, co hledate.
Server nevypise zadnou chybu? Pouzit PHP.EXE na kontrolu souboru?
Bojim se, ze v tomto vam moc nepomuzu, protoze psani webu se nevenuji
Posted by: 4ever | Date: 2016-03-08 10:47 | IP: IP Logged
Jo, ale to bych musel všechno dělat ručně když je tam hodně souborů... tak by byla taková funkce prospěšná že bych zadal * soubory v utf8 a program by to zkontroloval jestli tam není problém bez toho že by se otevíraly jako okna.
Teď ještě řeším další problém v jiném scriptu a to že mi tam nesedí párování závorek {} ... tady by se hodila funkce na porovnávání párování ale je to složitější (*).
script včera jel, tak dávám vrátit stav v historii zpět a nepomohlo to. Někde tam určitě máte chybu protože by se ta chyba měla odstranit tím že se vrátím v historii a to se nestalo. Ale to není poprvé co mi vrácení v historii nepomohlo...
* - k tomu párování závorek by se hodila funkce, která zohledňuje práci s bloky kódu dám příklad:
<?php if(!defined("C::URL")) die('No acces'); ?>
<? if($d->isAccess(O::OPTIONS_TEMPLATE)) {?>
<TABLE BACKGROUND="<?=C::URL?>/templates/<?=C_TEMP?>/images/zal.gif" WIDTH="100%" CELLSPACING="0" CELLPADDING="0">
<TR>
<TD HEIGHT="4"><IMG SRC="<?=C::URL?>/templates/<?=C_TEMP?>/images/h.gif" WIDTH="1" HEIGHT="4">
<TD ROWSPAN="3"><IMG SRC="<?=C::URL?>/templates/<?=C_TEMP?>/images/h.gif" WIDTH="1" HEIGHT="50">
<TR><TD>
<TR><TD>
<form name=ChangeTemplate>
<strong><?=CHANGE_DESIGN?></strong>
<select name=tmp onchange="window.location = document.ChangeTemplate.tmp.options[tmp.selectedIndex].value" class=w12>
<?php
$handle=opendir(C::PATH.'/templates/');
while (false!==($TemplateName = readdir($handle)))
{
if ($TemplateName != "." && $TemplateName != ".." && is_dir(C::PATH.'/templates/'.$TemplateName))
{
$select_current = ((isset($_COOKIE['TemplateName']) && ( $_COOKIE['TemplateName'] == $TemplateName)) || (!isset($_COOKIE['TemplateName']) && ( C_TEMP == $TemplateName))) ? 'selected' : '';
?>
<option value="<?=C::URL.'/index.php?l='.$l.'&ChangeTemplate='.$TemplateName?>" <?=$select_current?>><?=ucfirst($TemplateName)?>
<?php
}
}
closedir($handle);
?>
</select>
</form>
</TABLE>
<?}?>
(se zvýrazněnou syntaxí zde paste.ofcode.org)
Jde mi o to že takový kód je hrozně nepřehledný. I když kliknu např. na závorku } tak musím v dlouhém kódu hledat kde je závorka { která k ní náleží. Ona se mi sice zvírazní, ale někdy není vidět protože je až mimo obrazovku v pravo za scrolovacím posuvníkem. Tedy bylo by skvělé, kdybych mohl kliknutím zabalit tento blok a zároveň provést kontrolu uvnitř. Např.
v kódu
<? if (podmínka){?>
html kód A
<?php while ... php kód (tady se něco vygeneruje a vloží jako html ?>
html kód A.1 - například výpis z nabídky
<?php
} // tady končí podmínka php
} // tady končí cyklus php
// další akce php
?> // tady se žádný html kód nevygeneroval
html kód B
<?}?>
Takže první a poslední závorka {,} označuje jeden blok kódu. Bylo by skvělé mít možnost ho zkontrolovat např. pouhým kliknutím, následně ho zabalit a překontrolovat další kód. Nebo ho celý podsvítit aby se barevně odlišil od zbytku textu. Úplně nej by bylo kdyby PSPad uměl celý ten soubor zkontrolovat.
Posted by: vbr | Date: 2016-03-08 15:30 | IP: IP Logged
Zdravim,
bohuzel se zda, ze nektere uvedene funkce bohuzel v PSPadu aktualne nejsou proveditelne - code-folding - moznost skryvani casti kodu ve vybranych urovnich - neni v zakladni komponente editoru podporovan, zvazuje se myslim pro budouci verze.
Do jiste miry lze navigaci v kodu resit pomoci zalozek ci pruzkumikem kodu (V menu Nastroje - Shift+Ctrl+E) - lepe ale funguje ve vice strukturovanem kodu s funkcemi, promennymi apod.
Pokud je souvisejici zavorka spravne identifikovana, lze mezi nimi preskakovat kurzorem (Hledat: Souvisejici zavorka - Ctrl+M) lze i oznacit blok mezi zavorkami (v menu Upravy - Ctrl+Shift+M).
Kdyz se pri opakovanem preskakovani mezi zavorkami zmeni pozice kurzoru oproti predpokladu, muze to ukazovat na chybu ve "vyvyzeni" zavorek nebo na problem editoru s identifikaci souvisejicich zavorek - napr. nekdy pri zavorkach uvnitr retezcu.
U drive zminenych problemu s funkci kroku zpet, mam pocit, ze k nekterym nepravidelnostem nekdy dochazelo s aktivnimi skutecnymi tabulatory v textu, neznam ale aktualni stav.
Jestli (s omezenymi znalostmi php) spravne chapu puvodni problem s nepodporovanym znakem zpusobujicim nefunkcnost casti kodu, ktery se pak neprovede ale textove vypise do generovane stranky, nejde pak takovy soubor identifikovat prave podle obsahu onoho vypisu?
Pak by pripadne bylo mozne vyvolat konkretni soubor samostatne a mela(?) by se vratit chybova zprava.
Zdravim,
vbr
Posted by: Kráťa | Date: 2016-03-08 17:07 | IP: IP Logged
Ja si zase myslim, ze nez hledat "neviditelny znak", je lepsi, napsat primo chybu scriptu, ktera se zobrazi v prohlizeci. Pak se totiz casto ukaze, ze je chyba v necem uplne jinem (napr. spatna syntaxe - na to jsem expert).
--
--------
Třeba to PSPad dávno umí, pouze to neumím já.
Kráťa s vypnutým zvukem
Posted by: 4ever | Date: 2016-03-15 22:30 | IP: IP Logged
Ale tahle chyba s neviditelným znakem je potvrzená (mnou) že ji nešlo v php lehce najít právě proto, že hláška ukazuje na úplně něco jiného, např. do jiného souboru. Já taky C/C++ moc nerozumím teď už rok jsem v tom nedělal, ale je to něco podobného kdy někde zaponete např. středník na konci příkazu a chyba v IDE směřuje do úplně jiného souboru přitom to lze snadno ošetřit u toho kdo s tím má zkušenosti, ten ví kde to hledat. Chyba v php je podobná záhada ale těžko se hledá protože ten znak nejde vidět. Alespoň takto jsem si tu chybu zapsal do poznámek. Takže možná je to těžko uvěřitelné, ale mám to tak v poznámkách. Chyba co jsem řešil v tomto vlákně, se nakonec netýkala neviditelného znaku ale právě snad zapomenuté závorky. Těžko to najít a tak jsem používal právě tu zkratku ctrl+shift+m delete na smazání. Musel jsem povymazávat asi 40-80 bloků a ještě další texty html značek mezi tím takže to trvalo tak hodinu. Nějaká pomůcka by se hodila.
Edited 1 time(s). Last edit at 2016-03-15 22:32 by 4ever.
Editor PSPad - freeware editor, © 2001 - 2024 Jan Fiala, Hosted by Webhosting TOJEONO.CZ, design by WebDesign PAY & SOFT, code Petr Dvořák, Privacy policy and GDPR