проблема с плагином: MathX — LaTeX [решено]

Возникла проблема с плагином: MathX — LaTeX

В логах появилась ошибка:
[2018-09-18 22:53:03] (ERROR @ *** /core/cache/includes/elements/modplugin/66.include.cache.php : 32) PHP warning: mkdir(): Файл существует

Код из плагина:
if (!is_dir($cached_images)) {
    mkdir($cache_path, 0777);
  }


Плагин:
https://modx.com/extras/package/mathxlatexformulasinmodx

Плагин довольно старый, предполагаю, что дело в версии PHP.
Подскажите как исправить проблему?

7 комментариев

avatar
Добрый день.
Вы точно код скопировали?
Я вижу что идет проверка существования директории $cached_images и если её нет создается директория, но создается другая $cache_path. Но ведь $cache_path может быть уже существует!
avatar
Полный код выглядит так:
if ($modx->event->name == 'OnWebPagePrerender') {
  $mathx = 'mathx';
  $config = &$modx->getConfig();
  $cache_path = $config['assets_path'] . 'components/' . $mathx . '/';
  $cache_url = $config['assets_url'] . 'components/' . $mathx . '/';
  if (!is_dir($cached_images)) {
    mkdir($cache_path, 0777);
  }
  $cached_images = glob($cache_path . '*');
  
  $output = &$modx->resource->_output;
  
  $fn1 =
    '$cp = "' . $cache_path . '";
    $cu = "' . $cache_url . '";
    $mt = "";
    $img = ';
  $fn2 = 'md5($m[1]) . ".png";
    if (!file_exists($cp . $img)) {
      $ne = str_replace(" ", "%20", $m[1]);
      $ch = curl_init("http://latex.codecogs.com/png.latex?';
  $fn3 = '" . $ne);
      $fp = fopen($cp . $img, "w");
      curl_setopt($ch, CURLOPT_FILE, $fp); curl_setopt($ch, CURLOPT_HEADER, 0);
      curl_exec($ch); curl_close($ch); fclose($fp);
      $mt = " ";
    }
    return "';
  $fn4 = '";';
  
  $img_html_block = '<img class=\"mathx_block\" src=\"".$cu.$img."\" title=\"".$m[1].$mt."\">';
  $img_html_inline = '<img class=\"mathx_inline\" src=\"".$cu.$img."\" title=\"".$m[1].$mt."\">';
  $fn_block = $fn1.$fn2.$fn3.'<div class=\"mathx_block\">'.$img_html_block.'</div>'.$fn4;
  $fn_inline = $fn1.'"i-".'.$fn2.'\inline%20'.$fn3.'<span class=\"mathx_inline\">'.$img_html_inline.'</span>'.$fn4;
  
  $output = preg_replace_callback('@<math>(.*?)</math>@ui', 
      create_function('$m', $fn_block), $output);
  
  $output = preg_replace_callback('@<m>(.*?)</m>@ui', 
      create_function('$m', $fn_inline), $output);
}
avatar
Точно не скажу. Но попробуйте переставить строчу
$cached_images = glob($cache_path . '*');
выше!
Будет так:

  $cache_path = $config['assets_path'] . 'components/' . $mathx . '/';
  $cache_url = $config['assets_url'] . 'components/' . $mathx . '/';
  $cached_images = glob($cache_path . '*');
  if (!is_dir($cached_images)) {
    mkdir($cache_path, 0777);
  }
avatar
Спасибо, за поддержку…

Внёс изменения, ошибка не исчезла:
<code><span class="pun">[</span><span class="lit">2018</span><span class="pun">-</span><span class="lit">09</span><span class="pun">-</span><span class="lit">20</span><span class="pln"> </span><span class="lit">11</span><span class="pun">:</span><span class="lit">10</span><span class="pun">:</span><span class="lit">37</span><span class="pun">]</span><span class="pln"> </span><span class="pun">(</span><span class="pln">ERROR @ </span><span class="pun">****</span><span class="pln"> </span><span class="str">/core/</span><span class="pln">cache</span><span class="pun">/</span><span class="pln">includes</span><span class="pun">/</span><span class="pln">elements</span><span class="pun">/</span><span class="pln">modplugin</span><span class="pun">/</span><span class="lit">66.include</span><span class="pun">.</span><span class="pln">cache</span><span class="pun">.</span><span class="pln">php </span><span class="pun">:</span><span class="pln"> </span><span class="lit">34</span><span class="pun">)</span><span class="pln"> PHP warning</span><span class="pun">:</span><span class="pln"> is_dir</span><span class="pun">()</span><span class="pln"> expects parameter </span><span class="lit">1</span><span class="pln"> to be a valid path</span><span class="pun">,</span><span class="pln"> array given
</span><span class="pun">[</span><span class="lit">2018</span><span class="pun">-</span><span class="lit">09</span><span class="pun">-</span><span class="lit">20</span><span class="pln"> </span><span class="lit">11</span><span class="pun">:</span><span class="lit">10</span><span class="pun">:</span><span class="lit">37</span><span class="pun">]</span><span class="pln"> </span><span class="pun">(</span><span class="pln">ERROR @ </span><span class="pun">****</span><span class="pln"> </span><span class="str">/core/</span><span class="pln">cache</span><span class="pun">/</span><span class="pln">includes</span><span class="pun">/</span><span class="pln">elements</span><span class="pun">/</span><span class="pln">modplugin</span><span class="pun">/</span><span class="lit">66.include</span><span class="pun">.</span><span class="pln">cache</span><span class="pun">.</span><span class="pln">php </span><span class="pun">:</span><span class="pln"> </span><span class="lit">35</span><span class="pun">)</span><span class="pln"> PHP warning</span><span class="pun">:</span><span class="pln"> mkdir</span><span class="pun">():</span><span class="pln"> </span><span class="pun">Файл</span><span class="pln"> </span><span class="pun">существует</span></code>
Комментарий отредактирован 2018-09-20 09:16:25 пользователем kalina
avatar
А что, если закомментировать проверку директории cached_images-?

/* 
if (!is_dir($cached_images)) {
   mkdir($cache_path, 0777);
  }
*/
avatar
В принципе, Если смотреть на предоставленный код то видно что $cached_images в дальнейшем не используется. И более того я думаю что автор предполагал такую проверку:
if (!is_dir($cache_path)) {
    mkdir($cache_path, 0777);
  }

Можно закомментировать, а можно подавить ошибку
if (!is_dir($cached_images)) {
   @mkdir($cache_path, 0777);
  }
avatar
Спасибо, сделал так:
if (!is_dir($cache_path)) {
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.