Suche auf lima-city
-
in: Text in 2 Teile aufteilen
geschrieben von kataloge
webaffe schrieb:
Du berechnest in welchem Abstand von Zeichen ein Absatz sein muss und veränderst dementsprechend in einer for() Schleife die Anzahl und den Ort der Absätze
Hallo
ja, habe schon mit for Schleife rumprobiert,
Problem ist,nach dem Text abschneiden bei letzes Leerzeichen in 300 Zeichen Block
muss die nächste Start-Pos um die (nach dem Leerzeichen) nicht verwendeten Zeichen
angepasst werden, also nächste Start-Pos um diese Anzahl verschieben
garnicht so einfach
und dann hab was gefunden, was das gleiche macht wie meine for Schleife sollte
wordwrap()
$partlen = 300; // --- länge Je Text-Block --- $trenner = '~'; // --- ein Trenner-Zeichen, das nicht im $text vorkommt $neuertext = wordwrap( $text, $partlen, $trenner ); $textarray = explode($trenner,$neuertext); ## echo "<pre>\n"; ## print_r($textarray); ## echo "</pre>\n"; foreach($textarray as $tpart) { echo "<p>".$tpart."</p>\n"; }
... eigentlich ganz einfach
ABER noch nicht schön .... die Absätze werden mitten im Satz umgebrochen,
lieber wäre mir Umbrauch (neuer Text-Teil) nicht bei Leerzeichen, sondern bei Satzende (. Punkt)
nur Probleme dabei sind,
was ist, wenn ein Satz länger als 300 Zeichen ist, also kein Punkt kommt ...
dann muss es halt doch das letze Leerzeichen nehmen,
und was wenn im Text ein Zahlenwert wie 12.5 steht bzw. anderer Text mit Punkt der kein Satzende ist
... evtl mit Punkt + Leerzeichen als Trenner
-
in: Text in 2 Teile aufteilen
geschrieben von kataloge
Danke
so habe ich es jetzt gemacht und es klappt ganz gut
$dlength = strlen($data['descr']); $halblen = ceil($dlength/2); $splitpos = strpos($data['descr'], " ", $halblen); $descparts = str_split($data['descr'], $splitpos); $desc_part1 = trim($descarr[0]); $desc_part2 = trim($descarr[1]); echo "<p> ".$desc_part1." </p> \r\n"; // ----- Absatz 1 ----- echo "<p> ".$desc_part1." </p> \r\n"; // ----- Absatz 2 -----
aber bei sehr langen Texten würde ich gerne noch mehr Absätze machen,
quasi die Anzahl der Absätze (Text-Teile) dynamisch je nach Text-Gesamt-Länge.
Ein Absatz soll dabei z.B. maximal 300 Zeichen haben
wenn also der Text 1000 Zeichen hat, dann will ich 4 Absätze bekommen
... wie gehe ich das am besten an?
-
in: Funktion remove_accent und title_slug
geschrieben von kataloge
Aber wie bekomme ich den String, den ich filtern will
in das passende Format (die passende Codierung) ?
Wenn ich als Ausgangs-String iso-8859-1 habe
und diesen mit utf8_encode() behandle, funktioniert das nicht
weil viele Zeichen falsch oder als ? im neuen String ankommen ?!
Beispiel Euro-Zeichen
€ = Ausgangs-Teichen
€ = nach utf8_encode('€');
? = nach utf8_decode('€');
Soweit ich weiss ist aber das € Zeichen in UTF-8 so: €
zumindest wird bei einer charset=utf-8 Seite damit das € Zeichen angezeigt
? ...
bringt es was alle Zeichen im Text zum Filtern mit chr() Werten von ord() zu vergleichen?
function string_to_ascii($string) { $ascii = array(); for ($i = 0; $i < strlen($string); $i++) { $ascii[] = ord($string[$i]); } return($ascii); }
und damit die 2 Arrays in ord() Werte umwandeln
foreach($a as $itema) { $asciistr = string_to_ascii($itema); $letter = ''; foreach($asciistr as $aitem) { $a_letter .= chr($aitem); } $aord[] = $a_letter; }
foreach($b as $itemb) { $asciistr = string_to_ascii($itemb); $letter = ''; foreach($asciistr as $bitem) { $b_letter .= chr($bitem); } $bord[] = $b_letter; }
bringt das was?
... oder wie kann ich Strings immer "richtig" zu UTF-8 konvertieren
bei einfachem utf8_encode() kommt zu oft Müll raus ... ?!
-
in: Funktion remove_accent und title_slug
geschrieben von kataloge
Hallo
Hier mal ein Codeschnipsel ... ein Tutorial .... ein Tipp .... 2 Funktionen
Funktion: remove_accent() ......für:
Buschstaben mit Akzent oder Zirkumflex oder etc. zu "normalen" Buchstaben machen
und
Funktion: title_slug() ..... für
Titel von Seiten (für Mod_Rewrite) zu Dateinamen (SEO-URLs) machen
Quellcode:
<?php // ------------------------------------------------- // ----- remove_accent - ohne deutsche Umlaute ----- // ------------------------------------------------- function remove_accent($str) { $a = array( 'À', 'Á', 'Â', 'Ã', 'Å', 'Æ' , 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ð', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ø', 'Ù', 'Ú', 'Û', 'Ý', 'à', 'á', 'â', 'ã', 'å', 'æ' , 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ñ', 'ò', 'ó', 'ô', 'õ', 'ø', 'ù', 'ú', 'û', 'ý', 'ÿ', 'Ā', 'ā', 'Ă', 'ă', 'Ą', 'ą', 'Ć', 'ć', 'Ĉ', 'ĉ', 'Ċ', 'ċ', 'Č', 'č', 'Ď', 'ď', 'Đ', 'đ', 'Ē', 'ē', 'Ĕ', 'ĕ', 'Ė', 'ė', 'Ę', 'ę', 'Ě', 'ě', 'Ĝ', 'ĝ', 'Ğ', 'ğ', 'Ġ', 'ġ', 'Ģ', 'ģ', 'Ĥ', 'ĥ', 'Ħ', 'ħ', 'Ĩ', 'ĩ', 'Ī', 'ī', 'Ĭ', 'ĭ', 'Į', 'į', 'İ', 'ı', 'IJ' , 'ij' , 'Ĵ', 'ĵ', 'Ķ', 'ķ', 'Ĺ', 'ĺ', 'Ļ', 'ļ', 'Ľ', 'ľ', 'Ŀ', 'ŀ', 'Ł', 'ł', 'Ń', 'ń', 'Ņ', 'ņ', 'Ň', 'ň', 'ʼn', 'Ō', 'ō', 'Ŏ', 'ŏ', 'Ő', 'ő', 'Œ' , 'œ' , 'Ŕ', 'ŕ', 'Ŗ', 'ŗ', 'Ř', 'ř', 'Ś', 'ś', 'Ŝ', 'ŝ', 'Ş', 'ş', 'Š', 'š', 'Ţ', 'ţ', 'Ť', 'ť', 'Ŧ', 'ŧ', 'Ũ', 'ũ', 'Ū', 'ū', 'Ŭ', 'ŭ', 'Ů', 'ů', 'Ű', 'ű', 'Ų', 'ų', 'Ŵ', 'ŵ', 'Ŷ', 'ŷ', 'Ÿ', 'Ź', 'ź', 'Ż', 'ż', 'Ž', 'ž', 'ſ', 'ƒ', 'Ơ', 'ơ', 'Ư', 'ư', 'Ǎ', 'ǎ', 'Ǐ', 'ǐ', 'Ǒ', 'ǒ', 'Ǔ', 'ǔ', 'Ǖ', 'ǖ', 'Ǘ', 'ǘ', 'Ǚ', 'ǚ', 'Ǜ', 'ǜ', 'Ǻ', 'ǻ', 'Ǽ' , 'ǽ' , 'Ǿ', 'ǿ' ); $b = array( 'A', 'A', 'A', 'A', 'A', 'AE', 'C', 'E', 'E', 'E', 'E', 'I', 'I', 'I', 'I', 'D', 'N', 'O', 'O', 'O', 'O', 'O', 'U', 'U', 'U', 'Y', 'a', 'a', 'a', 'a', 'a', 'ae', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'n', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'y', 'y', 'A', 'a', 'A', 'a', 'A', 'a', 'C', 'c', 'C', 'c', 'C', 'c', 'C', 'c', 'D', 'd', 'D', 'd', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'G', 'g', 'G', 'g', 'G', 'g', 'G', 'g', 'H', 'h', 'H', 'h', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'IJ', 'ij', 'J', 'j', 'K', 'k', 'L', 'l', 'L', 'l', 'L', 'l', 'L', 'l', 'l', 'l', 'N', 'n', 'N', 'n', 'N', 'n', 'n', 'O', 'o', 'O', 'o', 'O', 'o', 'OE', 'oe', 'R', 'r', 'R', 'r', 'R', 'r', 'S', 's', 'S', 's', 'S', 's', 'S', 's', 'T', 't', 'T', 't', 'T', 't', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'W', 'w', 'Y', 'y', 'Y', 'Z', 'z', 'Z', 'z', 'Z', 'z', 's', 'f', 'O', 'o', 'U', 'u', 'A', 'a', 'I', 'i', 'O', 'o', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'A', 'a', 'AE', 'ae', 'O', 'o' ); $str = str_replace($a, $b, $str); return $str; } // ------------------------------------------------- // ------- title_slug - mit deutsche Umlaute ------- // ------------------------------------------------- function title_slug($str) { $ua = array( 'Ä' , 'Ö' , 'Ü' , 'ä' , 'ö' , 'ü' , 'ß' , '€' ); $ub = array( 'Ae', 'Oe', 'Ue', 'ae', 'oe', 'ue', 'ss', 'EUR' ); $str = str_replace($ua, $ub, $str); $str = remove_accent($str); $pa = array('/[^a-zA-Z0-9 -]/', '/[ -]+/', '/^-|-$/'); $pb = array('', '-', ''); $str = preg_replace($pa, $pb, $str); $str = strtolower($str); return $str; } // ------------------------------------------------- ?>
Wenn ich den Quellcode in meinen Editor (Ur-alt Dreamweaver 4) kopiere,
dann sehe ich folgenden Code (???) .. am Anfang siehts noch gut aus .. aber dann
... $a = array( 'À', 'Á', 'Â', 'Ã', 'Å', 'Æ' , 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ð', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ø', 'Ù', 'Ú', 'Û', 'Ý', 'à', 'á', 'â', 'ã', 'å', 'æ' , 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ñ', 'ò', 'ó', 'ô', 'õ', 'ø', 'ù', 'ú', 'û', 'ý', 'ÿ', 'A-', 'a-', 'A(', 'a(', 'A;', 'a;', 'C'', 'c'', 'C^', 'c^', 'C.', 'c.', 'C(', 'c(', 'D(', 'd(', '?', '?', 'E-', 'e-', 'E(', 'e(', 'E.', 'e.', 'E;', 'e;', 'E(', 'e(', 'G^', 'g^', 'G(', 'g(', 'G.', 'g.', 'G,', 'g,', 'H^', 'h^', '?', '?', 'I~', 'i~', 'I-', 'i-', 'I(', 'i(', 'I;', 'i;', 'I.', '?', 'IJ' , 'ij' , 'J^', 'j^', 'K,', 'k,', 'L'', 'l'', 'L,', 'l,', 'L(', 'l(', 'L.', 'l.', '?', '?', 'N'', 'n'', 'N,', 'n,', 'N(', 'n(', ''n', 'O-', 'o-', 'O(', 'o(', 'O"', 'o"', 'Œ' , 'œ' , 'R'', 'r'', 'R,', 'r,', 'R(', 'r(', 'S'', 's'', 'S^', 's^', 'S,', 's,', 'Š', 'š', 'T,', 't,', 'T(', 't(', '?', '?', 'U~', 'u~', 'U-', 'u-', 'U(', 'u(', 'U*', 'u*', 'U"', 'u"', 'U;', 'u;', 'W^', 'w^', 'Y^', 'y^', 'Ÿ', 'Z'', 'z'', 'Z.', 'z.', 'Ž', 'ž', 's', 'ƒ', 'O+', 'o+', 'U+', 'u+', 'A(', 'a(', 'I(', 'i(', 'O(', 'o(', 'U(', 'u(', 'U"-', 'u"-', 'U"'', 'u"'', 'U"(', 'u"(', 'U"`', 'u"`', 'A*'', 'a*'', 'AE'' , 'ae'' , 'O/'', 'o/'' ); ...
also zum Teil voll der Blödsinn .... ?!?!? derdas Array unbrauchbar macht ... 'u"-', 'U"'', 'u"'', ...
oder mancha auch nur als ? .... 't(', '?', '?', 'U~', ...
daher hier nochmal in anderer Formatierung:
<?php // ------------------------------------------------- // ----- remove_accent - ohne deutsche Umlaute ----- // ------------------------------------------------- function remove_accent($str) { $a = array( 'À', 'Ã', 'Â', 'Ã', 'Ã…', 'Æ' , 'Ç', 'È', 'É', 'Ê', 'Ë', 'ÃŒ', 'Ã', 'ÃŽ', 'Ã', 'Ã', 'Ñ', 'Ã’', 'Ó', 'Ô', 'Õ', 'Ø', 'Ù', 'Ú', 'Û', 'Ã', 'à ', 'á', 'â', 'ã', 'Ã¥', 'æ' , 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'Ã', 'î', 'ï', 'ñ', 'ò', 'ó', 'ô', 'õ', 'ø', 'ù', 'ú', 'û', 'ý', 'ÿ', 'Ä€', 'Ä', 'Ä‚', 'ă', 'Ä„', 'Ä…', 'Ć', 'ć', 'Ĉ', 'ĉ', 'ÄŠ', 'Ä‹', 'ÄŒ', 'Ä', 'ÄŽ', 'Ä', 'Ä', 'Ä‘', 'Ä’', 'Ä“', 'Ä”', 'Ä•', 'Ä–', 'Ä—', 'Ę', 'Ä™', 'Äš', 'Ä›', 'Äœ', 'Ä', 'Äž', 'ÄŸ', 'Ä ', 'Ä¡', 'Ä¢', 'Ä£', 'Ĥ', 'Ä¥', 'Ħ', 'ħ', 'Ĩ', 'Ä©', 'Ī', 'Ä«', 'Ĭ', 'Ä', 'Ä®', 'į', 'İ', 'ı', 'IJ' , 'ij' , 'Ä´', 'ĵ', 'Ķ', 'Ä·', 'Ĺ', 'ĺ', 'Ä»', 'ļ', 'Ľ', 'ľ', 'Ä¿', 'Å€', 'Å', 'Å‚', 'Ń', 'Å„', 'Å…', 'ņ', 'Ň', 'ň', 'ʼn', 'ÅŒ', 'Å', 'ÅŽ', 'Å', 'Å', 'Å‘', 'Å’' , 'Å“' , 'Å”', 'Å•', 'Å–', 'Å—', 'Ř', 'Å™', 'Åš', 'Å›', 'Åœ', 'Å', 'Åž', 'ÅŸ', 'Å ', 'Å¡', 'Å¢', 'Å£', 'Ť', 'Å¥', 'Ŧ', 'ŧ', 'Ũ', 'Å©', 'Ū', 'Å«', 'Ŭ', 'Å', 'Å®', 'ů', 'Ű', 'ű', 'Ų', 'ų', 'Å´', 'ŵ', 'Ŷ', 'Å·', 'Ÿ', 'Ź', 'ź', 'Å»', 'ż', 'Ž', 'ž', 'Å¿', 'Æ’', 'Æ ', 'Æ¡', 'Ư', 'ư', 'Ç', 'ÇŽ', 'Ç', 'Ç', 'Ç‘', 'Ç’', 'Ç“', 'Ç”', 'Ç•', 'Ç–', 'Ç—', 'ǘ', 'Ç™', 'Çš', 'Ç›', 'Çœ', 'Ǻ', 'Ç»', 'Ǽ' , 'ǽ' , 'Ǿ', 'Ç¿' ); $b = array( 'A', 'A', 'A', 'A', 'A', 'AE', 'C', 'E', 'E', 'E', 'E', 'I', 'I', 'I', 'I', 'D', 'N', 'O', 'O', 'O', 'O', 'O', 'U', 'U', 'U', 'Y', 'a', 'a', 'a', 'a', 'a', 'ae', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'n', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'y', 'y', 'A', 'a', 'A', 'a', 'A', 'a', 'C', 'c', 'C', 'c', 'C', 'c', 'C', 'c', 'D', 'd', 'D', 'd', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'G', 'g', 'G', 'g', 'G', 'g', 'G', 'g', 'H', 'h', 'H', 'h', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'IJ', 'ij', 'J', 'j', 'K', 'k', 'L', 'l', 'L', 'l', 'L', 'l', 'L', 'l', 'l', 'l', 'N', 'n', 'N', 'n', 'N', 'n', 'n', 'O', 'o', 'O', 'o', 'O', 'o', 'OE', 'oe', 'R', 'r', 'R', 'r', 'R', 'r', 'S', 's', 'S', 's', 'S', 's', 'S', 's', 'T', 't', 'T', 't', 'T', 't', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'W', 'w', 'Y', 'y', 'Y', 'Z', 'z', 'Z', 'z', 'Z', 'z', 's', 'f', 'O', 'o', 'U', 'u', 'A', 'a', 'I', 'i', 'O', 'o', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'A', 'a', 'AE', 'ae', 'O', 'o' ); $str = str_replace($a, $b, $str); return $str; } // ------------------------------------------------- // ------- title_slug - mit deutsche Umlaute ------- // ------------------------------------------------- function title_slug($str) { $ua = array( 'Ä' , 'Ö' , 'Ü' , 'ä' , 'ö' , 'ü' , 'ß' , '€' ); $ub = array( 'Ae' , 'Oe' , 'Ue' , 'ae' , 'oe' , 'ue' , 'ss' , 'EUR' ); $str = str_replace($ua, $ub, $str); $str = remove_accent($str); $pa = array('/[^a-zA-Z0-9 -]/', '/[ -]+/', '/^-|-$/'); $pb = array('', '-', ''); $str = preg_replace($pa, $pb, $str); $str = strtolower($str); return $str; } // ------------------------------------------------- ?>
aber anstatt der hier gezeigten Platzhalter wie oder sehe ich in meinem Editor
die entsprechenden Sonderzeichen, die damit abgebildet werden
auch wenn ich mir den Code hier wieder raus-kopiere
also kann das Forum einfach ein paar Zeichen nur ala oder etc. darstellen,
die kommen aber bei copy+paste anscheinend doch "richtig" im Editor an ...
-
in: Session Laufzeit einstellen
geschrieben von kataloge
ok, verstehe, dafür brauche ich also Cookies, damit auch nach verlassen des Browsers die Daten verfügbar bleiben
das bekomme ich hin
aber nur zum Verständniss:
Warum ist bei meinem Test die Session nach 120 Sekunden noch aktiv ?!
sollte nicht durch: php_value session.gc_maxlifetime 120 in der .htaccess
nach genau 120 Sekunden die Session vom System "gelöscht" werden ?
-
in: Session Laufzeit einstellen
geschrieben von kataloge
Hallo
ich möchte auf dem Webspace die Lebensdauer von SESSIONs einstellen
habe in der .htaccess zum Testen mal 120 Sekunden eingestellt
php_value session.gc_maxlifetime 120
der Wert scheint angenommen zu werden, demm mit
$szeit = ini_get('session.gc_maxlifetime');
bekomme ich den Wert 120
Aber wenn ich jetzt eine Session Starte (und darin Variablen zuweise = Login-Daten)
dann ist die Session ABER auch nach 120 Sekunden noch da und der Login noch aktiv ?!
was ist falsch?
was muss ich tun, damit ich die Lebensdauer einer Session bestimmen kann ?
PS: ja,ich kann den Timestamp der Ablauf-Zeit beim Login / anlegen der Session speichern,
und wenn aktueller Timestamp größer ist als der gespeicherte dann session_unset()
Aber mir geht es nicht um das Beenden so kurzer Sessions (120 Sec) sondern ich will
damit dann eher längere Laufzeiten machen, wenn möglich auch mehrere Tage lange
die 120 Sec sind nur zum Testen ob es überhaupt geht
-
in: modulo % Rechnung und Zahlensysteme (Rechnen mit Rest)
geschrieben von kataloge
Hallo
habe das mal ausprobiert, und festgestellt, dass man auch bei Stunde den Wert 1 abziehen muss
hier nochmal 2 Funktionen
Funktion getTerminRest()
.... mit 2 Parameter (Ausgangs-Termin und Ziel-Termin als Timestamp)
<?php // --------------------------------------------------- ## $termin1 = time(); // aktueller Timestamp oder Timestamp von Ausgangs-Datum ## $termin2 = strtotime(2011-12-24 00:00:00); // Termin in der Zukunft als Timestamp ## oder: $termin2 = mktime ($hour, $minute, $second, $month, $day, $year); function getTerminRest($termin1, $termin2) { $seconds = ($termin2 - $termin1); $difsec = abs($seconds); $ergz = date_parse(date("Y-m-d H:i:s", ($difsec) )); $ergz['year'] = ($ergz['year'] - 1970); $ergz['month'] = ($ergz['month'] - 1); $ergz['day'] = ($ergz['day'] - 1); $ergz['hour'] = ($ergz['hour'] - 1); $ausgabe = ''; if ( 1 < $ergz['year'] ) { $ausgabe .= "".$ergz['year']." Jahre und "; } elseif ( $ergz['year'] == 1 ) { $ausgabe .= "".$ergz['year']." Jahr und "; } if ( 1 < $ergz['month'] ) { $ausgabe .= "".$ergz['month']." Monate und "; } elseif ( $ergz['month'] == 1 ) { $ausgabe .= "".$ergz['month']." Monat und "; } if ( 1 < $ergz['day'] ) { $ausgabe .= "".$ergz['day']." Tage und "; } elseif ( $ergz['day'] == 1 ) { $ausgabe .= "".$ergz['day']." Tag und "; } if ( 1 < $ergz['hour'] ) { $ausgabe .= "".$ergz['hour']." Stunden und "; } elseif ( $ergz['hour'] == 1 ) { $ausgabe .= "".$ergz['hour']." Stunde und "; } if ( 1 < $ergz['minute'] ) { $ausgabe .= "".$ergz['minute']." Minuten und "; } elseif ( $ergz['minute'] == 1 ) { $ausgabe .= "".$ergz['minute']." Minute und "; } if ( 1 < $ergz['second'] ) { $ausgabe .= "".$ergz['second']." Sekunden"; } elseif ( $ergz['second'] == 1 ) { $ausgabe .= "".$ergz['second']." Sekunde"; } if ( 0 < $seconds ) { $outstr = "Es sind noch ".$ausgabe." bis zum Termin."; } else { $outstr = "Der Termin ist schon ".$ausgabe." abgelaufen."; } return $outstr; } // --------------------------------------------------- ?>
Funktion getRestZeit()
.... mit nur der Differenz in Sekunden als Parameter
<?php // --------------------------------------------------- ## $difsec = ($timestamp2 - $timestamp1); // --- Differenz zweier Timestamps in Sekunden function getRestZeit($seconds) { $difsec = abs($seconds); $ergz = date_parse(date("Y-m-d H:i:s", ($difsec) )); $ergz['year'] = ($ergz['year'] - 1970); $ergz['month'] = ($ergz['month'] - 1); $ergz['day'] = ($ergz['day'] - 1); $ergz['hour'] = ($ergz['hour'] - 1); $ausgabe = ''; if ( 1 < $ergz['year'] ) { $ausgabe .= "".$ergz['year']." Jahre und "; } elseif ( $ergz['year'] == 1 ) { $ausgabe .= "".$ergz['year']." Jahr und "; } if ( 1 < $ergz['month'] ) { $ausgabe .= "".$ergz['month']." Monate und "; } elseif ( $ergz['month'] == 1 ) { $ausgabe .= "".$ergz['month']." Monat und "; } if ( 1 < $ergz['day'] ) { $ausgabe .= "".$ergz['day']." Tage und "; } elseif ( $ergz['day'] == 1 ) { $ausgabe .= "".$ergz['day']." Tag und "; } if ( 1 < $ergz['hour'] ) { $ausgabe .= "".$ergz['hour']." Stunden und "; } elseif ( $ergz['hour'] == 1 ) { $ausgabe .= "".$ergz['hour']." Stunde und "; } if ( 1 < $ergz['minute'] ) { $ausgabe .= "".$ergz['minute']." Minuten und "; } elseif ( $ergz['minute'] == 1 ) { $ausgabe .= "".$ergz['minute']." Minute und "; } if ( 1 < $ergz['second'] ) { $ausgabe .= "".$ergz['second']." Sekunden"; } elseif ( $ergz['second'] == 1 ) { $ausgabe .= "".$ergz['second']." Sekunde"; } if ( 0 < $seconds ) { $outstr = "Es sind noch ".$ausgabe." bis zum Termin."; } else { $outstr = "Der Termin ist schon ".$ausgabe." abgelaufen."; } return $outstr; } // --------------------------------------------------- ?>
ich hoffe das stimmt so
zumindest hat es bei meinen Versuchen nur mit dem Zusatz
$ergz['hour'] = ($ergz['hour'] - 1);
richtige Ergebnisse geliefert, ohne das war es immer um genau die eine Stunde zuviel
startet der Unix Timestamp mit einer Stunde ... also 1970-01-01 (01:00:00)
oder warum war bei meinen Tests immer die eine Stunde zuviel ?
-
in: Datei ab bestimmter Zeile (mit LImit) auslesen
geschrieben von kataloge
Ja, gute Idee
gleich beim Einlesen alle 100 Zeilen eine neue Sub-Datei speichern
ich hoffe mal, dass das keine Probleme macht mit Memory-Limit oder Script-Laufzeit
weil dazu muss ich ja doch alle Zeilen der grossen Datei komplett auslesen
und dann auch noch (alle x Zeilen) inneue Datei Speichern
deshalb hatte ich ja die Idee, jede Zeile nur ein paar Zeichen auslesen
while($line = fgets($fpo, 64)) { ... }
und den Zeiger vom Anfang jeder 100sten Zeile zwischen zu speichern
Frage mich aber gerade, ob ich beim Lesen von nur paar Zeichen je Zeile
überhaupt auf den richtigen zeiger kommen kann, gwenn dann brauche ich ja
die Position des letzten \n (Zeilenumbruch) alle 100 Zeilen
denn ein Zeichen für "Zeilenanfang" gibt es soweit ich weiss garnicht, oder?
habe Deinen Code mal getestet und ein paar Änderungen gemacht
als Funktion (noch ausbaufähig)
<?php // ------------------------------------------------- function getSubFiles ($quelldatei, $z=100, $csvhead=false) { $FileHandle = fopen($quelldatei, 'r'); $zcount = 0; // Zeilen-Zaehler $fcount = 1; // Datei-Zehler $zlimit = $z; // Zeilen Limit pro Datei $savedir = 'data"; // Speicher-Verzeichnis $sub_Datei = $savedir.'/subdaten_'.$fcount.'.txt'; // ---- Erste Sub-Datei $HandleSub = fopen($sub_Datei, 'w', 0666); if ($csvhead === true) { $kopf = fgets($FileHandle, 2048); fwrite($HandleSub,$kopf); // ---- Kopf-Zeile schreiben } while($line = fgets($FileHandle, 2048)) { $zcount++; // --- neue Zeile $rest = ($zcount % $zlimit); if ($rest == 0) { fclose($HandleSub); // ---- Alte Sub-Datei schliessen $fcount++; $sub_Datei = $savedir.'/subdaten_'.$fcount.'.txt'; // ---- Neue Sub-Datei ## echo "<br /> ... neue Datei: <strong>".$sub_Datei."</strong> \r\n"; $HandleSub = fopen($sub_Datei, 'w', 0666); if ($csvhead === true) { fwrite($HandleSub,$kopf); // ---- Kopf-Zeile schreiben } } fwrite($HandleSub,$line); // ---- Zeile in Sub-Datei schreiben } fclose($HandleSub); // ---- Letzte Sub-Datei schliessen fclose($FileHandle); $out = array($zcount,$fcount); return $out; } // ------------------------------------------------- /* --------------- * * Drei (3) Parameter bei Funktion: getSubFiles * * Parameter1 = Quell-Datei (filename / Dateiname) * Parameter2 = Zeilen pro Sub-Datei (int / Zahl) * Parameter3 = CSV Daten Kopf-Zeile (true oder false) * ------------- */ $qdatei = 'datenlsite.txt'; $zeilen = 100; $erg = getSubFiles($qdatei, $zeilen, true); echo "<br /> Gesamt ".$erg[0]." Zeilen. \r\n"; echo "<br /> Gesamt ".$erg[1]." Sub-Dateien. \r\n"; // ------------------------------------------------- ?>
wenn dritter Parameter TRUE ist, dann wird die erste Zeile aus der Quelldatei
in jede SubDatei auch als erste Zeile geschrieben (für. CSV Daten)
aber wie gesagt vermute ich, dass dies bei sehr grossen Datein
wegen Memory-Limit oder Script-Laufzeit zu Problemen (Abbruch) kommt
-
in: Datei ab bestimmter Zeile (mit LImit) auslesen
geschrieben von kataloge
ja, das Prinzip ist genau was ich brauche
aber wie bekommr ich die Zeiger-Position von z.B. Anfang der Zeile 101 ... oder Zeile 201 ... etc. ?
also doch erstmal die ganze Datei durchgehen,
alle 100 Zeilen den Zeiger "zwischenspeichern" (in eine info-textdatei)
und dann könnte ich mit den Zeigern arbeiten
$datei = 'datenliste.txt'; $fpo = fopen($datei, "r"); $zeigerdaten = ''; $zeilen = 0; while($line = fgets($fpo, 128)) { // ---- Quelldatei Zeilen gekützt einlesen $zeilen++; // ---- Zaehler erhoehen (neue Zeile) if ($zeilen == 100) { // ---- Zaehler Limit erreicht // ---- ? ... Zeiger am Anfang dieser Zeile ermitteln ?? .... ftell() ... ? $zeigerdaten .= $zeigerwert.'|'; // ---- Zeiger-Wert in String mit Trenner ablegen $zeilen = 0; // ---- Zaehler zuruecksetzen } } $zeigerdaten = rtrim($zeigerdatenm'|'); $zinfo = 'zeigerinfo.txt'; $fpz = fopen($zinfo, "w"); fwrite($fpz,$zeiger.'|');
Zeiger am Anfang dieser Zeile ermitteln ?? .... ftell() .
ftell() von WAS ? ... von $fpo ?? ... Anfang der Zeile ?
und dann zum Lesen der Daten auf Seiten (je Seite 100 Zeilen)
$zeiger_string = file_get_contents($zinfo); $zeiger_array = explode('|',$zeiger_string); $zeiger_anzahl = count($zeiger_array); // --- Seiten blaettern ... Auslesen mit fseek() aus Werte in $zeiger_array
so ungefähr, aber ich bekomms nicht hin (Zeiger an Zeilenanfang alle 100 Zeilen)
EDIT: ok, mit file_get_contents() kann ich dann auch die eigentlichen Daten mit Zeiger-Pos lesen
aber dazu brauche ich ja zuerst einmal die Zeiger-Positionen alle 100 Zeilen ... ?!
-
in: Datei ab bestimmter Zeile (mit LImit) auslesen
geschrieben von kataloge
Hallo
ich habe eine .txt Datei mit sehr vielen Zeilen
wie kann ich die Daten ab einer bestimmten Zeile (mit Limit = 100) auslesen
also so, dass ich je Aufruf nicht die komplette Datei einlesen muss
sondern z.B. ab Zeile 101 bis Zeile 200 ... oder ab Zeile 201 bis Zeile 300 ... etc.
Wenn ich versuche die komplette Datei in ein Array zu lesen,
und erst dann in Teile zu zerlegen dann reicht der Speicher nicht aus ...
---> Allowed memory size of 67108864 bytes exhausted
gibt es eine Möglichkeit beim Datei-Auslesen für "starte bei Zeile n" ??
das Ende (Limit) ist dann ja kein Problem mit Zähler und break();
wie setze ich den "Zeiger" genau an den Anfang einer bestimmten Zeile?
-
in: Text in 2 Teile aufteilen
geschrieben von kataloge
Hallo
ich habe in einem Array Texte (String) die ca. zwischen 200 und 800 Zeichen lang sind.
Wie kann ich den Text in 2 Absätze aufzeilen, die etwa gleich gross sind
... ohne dass der Text mitten im Wort abgeschnitten wird ?
bisher habe ich es so
$dlength = strlen($data['descr']); $halblen = ceil($dlength/2); $descarr = str_split( $data['descr'], $halblen ); echo "<p> ".$descarr[0]." </p> \r\n"; // ----- Absatz 1 ----- echo "<p> ".$descarr[1]." </p> \r\n"; // ----- Absatz 2 -----
wie bekomme ich es hin,. das der Text nicht mitten in einem Wort getrennt wied?
-
in: Kategorien und Unterkategorien
geschrieben von kataloge
Hallo
man kann sich "Nested Sets" auch einfacher machen
wenn man vorher weiss, vielele Unter-Ebenen es geben soll
einfach die "Bereiche" bzw. "knoten" vorher festlegen
dann muss man nicht jedesmal die Knoten updaten
wenn neue Elemente dazu kommen
BSP: mit 3 Ebenen
1. Ebene (Hauptkategorien) ... jeweils ganze 1000er Schritte
2. Ebene (Unterkategorien jeweils ganze 100er Schritte
3. Ebene (Unter-Unter-Kats) jeweils innerhalb der 100er
oder man benutzt eine fertige Klasse / Funktion für Nestet Sets
EDIT: sowas hier: phpclasses Celko
kenne jetzt grad keine, aber vielleicht kann ja jemand eine empfehlen
(oder machen) wo man einfach Kategorien einfügen kann
Funktionsaufruf mit $inknoten = wo die Kategorie "rein" soll
makeNewkat ($inknoten, $neuekat);
z.B.
makeNewkat ('Root', 'Hauptkategorie3'); // neue Haupt-Kategorie eintragen
makeNewkat ('Hauptkategorie3', 'Unterkategorie7'); // neue Kategorie in Haupt-Kat3 eintragen
makeNewkat ('Unterkategorie7', 'Unterunterkategorie2'); // neue Kategorie in Unterkategorie7 eintragen
nur so als Idee :)
-
in: Seiten Blättern in MySQL Ergebnis
geschrieben von kataloge
Hallo, ne nette Idee ...
aber Du hast da noch einen kleinen Fehler bei Ausgabe der Seiten-Nummern
mit führenden NULLen ... alle ab 100 bekommen auch eine 0 vorne dran (= hier aber falsch)
if (10 < $np AND $np < 100) { $npi = "0".$np; } elseif ($np < 10) { $npi = "00".$np; } else { $npi = "0".$np; }
richtig wäre:
if (10 < $np AND $np < 100) { $npi = "0".$np; } elseif ($np < 10) { $npi = "00".$np; } else { $npi = "".$np; }
das gleiche bei
else { $pmaxi = "0".$pmax; }
auch da die 0 (NULL) raus nehmen
-
in: Bewertung ohne Browser-Reload speichern?
geschrieben von kataloge
hmm
etwas abschreckend finde ich document.createElement('iframe');
wer will schon iFrames ?!
lieber wäre mir ein POST oder GET (zu einer PHP-Datei) um das Ergebnis zu speichern
aber auch das bekomme ich nicht hin
mal ohne die 10 Punkte, ganz einfaches Beispiel
<div id="eintrag1"> <p>Screenshot, Titel, Link und Beschreibung zum Eintrag 1 .... </p> <div class="vote" onClick="abstimmung();"> VOTE: - <span class="plus">dafür</span> - <span class="infoplus"><?php echo $stimmen_plus; ?></span> - <span class="minus">dagegen</span> - <span class="infoplus"><?php echo $stimmen_minus; ?></span> </div> </div> <div id="eintrag2"> <p>Screenshot, Titel, Link und Beschreibung zum Eintrag 2 .... </p> <div class="vote" onClick="abstimmung();"> VOTE: - <span class="plus">dafür</span> - <span class="infoplus"><?php echo $stimmen_plus; ?></span> - <span class="minus">dagegen</span> - <span class="infoplus"><?php echo $stimmen_minus; ?></span> </div> </div> <div id="eintrag3"> <p>Screenshot, Titel, Link und Beschreibung zum Eintrag 3 .... </p> <div class="vote" onClick="abstimmung();"> VOTE: - <span class="plus">dafür</span> - <span class="infoplus"><?php echo $stimmen_plus; ?></span> - <span class="minus">dagegen</span> - <span class="infoplus"><?php echo $stimmen_minus; ?></span> </div> </div>
wie sieht dann JavaScript aus, um bei Klick auf ein "dafür" oder "dagegen" in einem Eintrag
diese Werte an eine PHP-Datei (im Hintergrund) zu senden (egal ob POST oder GET)
muss vielleicht das onClick jeweils in den <span> Tag rein ?
und wie schreibe ich das Ergebnis dann in den entsprechenden Info-Span ? ... innerHTML ?
-
in: Bewertung ohne Browser-Reload speichern?
geschrieben von kataloge
Hallo
Ich habe eine Liste mit Links zu Webseiten
User sollen diese Links (Webseiten) bewerten können (1 bis 10 Punkte geben)
das Speichern der Votes (und Re-Vote Sperre) ist nicht das Problem
bzw. das mache ich serverseitig mit MySQL
aber wie kann ich die Abgabe einer Bewertung speichern
ohne dass die ganze Seite neu Laden muss ?
ich habe gehört sowas soll mit jQuery funktionieren, aber wie ?
... Bei Klick auf Vote-Button (bzw. Vote-Link) diesen Vote speichern ohne Browser-Reload ?!?
jemand einen Tipp wie ich das arn angehen soll ? ... hab noch keine Erfahrung mit jQuery