strlen() ожидает, что параметр 1 будет строкой, задан массив

У меня есть старый сайт, использующий форму. Когда форма отправляется, я получаю эту ошибку:

Предупреждение: strlen() ожидает, что параметр 1 будет строкой, массивом, указанным в /home/user/public_html/form/phorm.php в строке 2015.

Я знаю, что это из-за обновления до php 5.3, есть ли простой способ исправить эту строку кода, чтобы мои формы снова работали?

 if (strlen($PHORM_ALERTTO) && !strlen($PHORM_TO) && !$PHORM_INFONLY && !$ph_GotData) {
    $PHORM_TO = $PHORM_ALERTTO; //THIS IS LINE 2015





 Read the mail template file(s) and mail it (them) to the user */
  $ph_section = "user template";
  if (strlen($PHORM_ALERTTO) && !strlen($PHORM_TO) && !$PHORM_INFONLY && !$ph_GotData) {
    $PHORM_TO = $PHORM_ALERTTO; //THIS IS LINE 2015
    settype($PHORM_TO, "array");
  }
  if (isset($PHORM_TMPL) && isset($PHORM_TO) && !$ph_Abort) {
    if ($ph_debug2) echo "<B>JS:</B> Mail Template(s)<BR>";

    if (count($PHORM_TMPL) > $ph_MaxTMPL) $ph_Alerts['120'] = ph_Message("A120");

    list(,$fPHORM_TO)      = each($PHORM_TO);
    list(,$fPHORM_SUBJECT) = each($PHORM_SUBJECT);

    while ($ph_MaxTMPL-- && list($ph_key, $lPHORM_TMPL) = each($PHORM_TMPL)) {
      if ($lPHORM_TMPL == ph_GENERIC) $lPHORM_TMPL = "$ph_root/files/generic.txt";
      else                            $lPHORM_TMPL = "$ph_tpd/$lPHORM_TMPL";

      $ph_Message   = "";
      $ph_Headers   = "";
      $ph_NonHeader = "";

      $lPHORM_TO      = "";
      $lPHORM_FROM    = "";
      $lPHORM_SUBJECT = "";
      $lPHORM_HEADERS = "";

      $ph_TemplateHeaders = false;
      if (ereg("(.+) +\+h$", $lPHORM_TMPL, $ph_regs)) {
        $lPHORM_TMPL = trim($ph_regs[1]);
        $ph_TemplateHeaders = true;
      }

      if ($ph_debug8) echo "Mail Template <B>$lPHORM_TMPL</B><BR>";

      if (!$ph_Template = @implode("", file($lPHORM_TMPL))) {
        $ph_Alerts['005'] = ph_Message("A005");
        if ($php_errormsg) $ph_Alerts['005P'] = "%%%: $php_errormsg";
        continue;
      }

person Peter Eastwood    schedule 01.06.2013    source источник
comment
это потому, что вы можете использовать его только для подсчета строк, если вы хотите подсчитать массив, используйте count()   -  person samayo    schedule 01.06.2013
comment
все сказано в предупреждении...   -  person vdegenne    schedule 01.06.2013
comment
любой совет, что мне нужно изменить в этой строке кода?   -  person Peter Eastwood    schedule 01.06.2013
comment
if (strlen($PHORM_ALERTTO) && !strlen($PHORM_TO) && !$PHORM_INFONLY && !$ph_GotData) { $PHORM_TO = $PHORM_ALERTTO; // ЭТО ЛИНИЯ 2015   -  person Peter Eastwood    schedule 01.06.2013


Ответы (1)


Это связано с тем, что вы используете strlen() для подсчета массива, в то время как он должен использоваться, когда вам нужно подсчитывать строки. Ваша ошибка совершенно очевидна.

Если вам нужно подсчитать массив или больше, просто используйте count или sizeof.

person Fabio    schedule 01.06.2013
comment
Ошибка @PeterEastwood означает, что вы используете функцию strlen для массива, поэтому либо $PHORM_ALERTTO, либо $PHORM_TO являются массивом, попробуйте изменить на if (count($PHORM_ALERTTO) && !count($PHORM_TO) && !$PHORM_INFONLY && !$ph_GotData) { $PHORM_TO = $PHORM_ALERTTO; - person Fabio; 01.06.2013