[PHP]Ró?żnica między Lycosem a... localhost :)

0

Mam taki problem. Tworzę modyfikację do phpBB zajmującą się automatycznym zaznaczaniem błędów ortograficznych w postach. Wygląda to tak:

<?
/* **************************************** *
 *   Skrypt do automatycznego zaznaczania   *
 *    błędów ortograficznych w phpBB 2.0    *
 *   by Przemo. Autorzy: Adam Pilorz, Ktos  *
 * **************************************** */

$litery="abcdefghijklmnopqrstuwxyzABCDEFGHIJKLMNOPQRSTUWXYZ?ćęłńó?ĽżˇĆĘŁŃÓ??Ż"; // te literki będ? uznawane za kawałek wyrazu. Pozostałe znaki uznawane s? za separatory.

$rowid=0;

function get_mask()
{
global $rowid;
$ort=array(1=>"*ogule", "<ort>wogóle",</ort> "kłutni*", "kłuc*", "<ort>odrazu",</ort> "<ort>poprostu",</ort> "<ort>żeczywi*",</ort> "<ort>prub*",</ort> "nietylko");

$rowid=$rowid+1;
if($rowid<=9) { return $ort[$rowid]; }
else { return FALSE; }
}

function GetStart($tekst, $dana) {
  global $litery;
  for ($i = $dana; $i<=0, $i--;) {
    if(($i==0) || (strpos($litery, substr($tekst, $i-1, 1)) === FALSE)) {
      $start = $i;
      return $start;
    }
  }
}

function GetEnd($tekst, $dana) {
  global $litery;
  $tekstlen=strlen($tekst);
  for ($i = $dana; $i>=$tekstlen, $i++;) {
    if((strpos($litery, substr($tekst, $i, 1)) === FALSE) || ($i==$tekstlen)) {
      $end = $i;
      return $end;
    }
  }
}

function Ortuj($tekst, $dana, &$end) {
  $start = GetStart($tekst, $dana);
  $end = GetEnd($tekst, $dana);
  if((substr($tekst, $start-5, 5)!='[ort]') || (substr($tekst, $end, 6)!='[/ort]'))
  {
  $before = substr($tekst, 0, $start);
  $after = substr($tekst, $end, strlen($tekst));
  $error = substr($tekst, $start, $end - $start);
  $end=$end+11;
  return $before.'[ort]' . $error . '[/ort]'.$after;
  }
  else return $tekst;
}

function AutoOrt($post_message)
{
/*global $db;*/
//echo("<!-- ".$post_message." //-->");

/*$sql="SELECT * FROM my_phpbb_autoorts";
$result=$db->sql_query($sql);
while($row=$db->sql_fetchrow($result))*/
global $litery;
$rowid=0;
while($row=get_mask())
  {
  echo("<!-- ".$row." //-->");
  $offset=0;
  $mask=str_replace("*", "", $row);
  $masklen=strlen($mask);
  $pos=strpos($post_message, $mask, $offset);
  while($pos!==FALSE)
    {
    $pos=$pos+1;
    $ort=TRUE;
    if((substr($row, 0, 1)!='*') && (strpos($litery, substr($post_message, $pos-2, 1))!==FALSE))
      {
      $ort=FALSE;
      }
    if((substr($row, -1)!='*') && (strpos($litery, substr($post_message, $pos+$masklen-1, 1))!==FALSE))
      {
      $ort=FALSE;
      }
    if($ort)
      {
      $end=0;
      $post_message=Ortuj($post_message, $pos, $end);
      $offset=$end;
      }
    else
      {
      $offset=$pos+$masklen;
      }
    $pos=strpos($post_message, $mask, $offset);
    }
  }

return $post_message;
}
?>

No i jak odpalę tą funkcję u siebie na localhoście (EasyPHP), to wsio działa, ale jak odpalę to na forum uruchomionym na Lycosie, to zaznacza tylko dwa pierwsze znaki z maski, resztę pozostawia poza tagiem. Co jest źle??

0

Zwykle różnica tkwi w ustawieniach Lycosa i localhostu. Ja się długo męczyłem z problemem, że na local miałem Register_globals na on, a na clawz (mój ex-host) nas off.... Lycos chyba ma podgląd konfiguracji, nie?

0

No tak, ale problem w tym, że ten skrypt z niczego takiego nie korzysta :/
Nie wykorzystuje żadnych tego typu rzeczy... Dzisiaj przeprowadziłem test i po prostu się zawiodłem :/ Wgrałem na serwer Lycosa ten skrypcik testowy, którym testowałem tą funkcję, a tu się okazuje, że w tym skrypcie ta sama funkcja działa dobrze, a w innym (wewnątrz forum phpBB) nie :/

0

może źle go inicjujesz w skrypcie, a gdzieś kiedyś czytałem że funkcja substr w niektórych wersjach PHP określała druga liczba znak końcowy a w innych - ilość znaków do skopiowania

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