заменить строку с кодом PHP - PullRequest
       306

заменить строку с кодом PHP

0 голосов
/ 10 февраля 2011

Мне нужно найти строку внутри строки (например, "foo") и затем заменить ее на код PHP. Возможно ли это?

Я создаю плагин Joomla. Когда в моей статье будет что-то вроде "{foo}", я заменю его включением (обязательно или как угодно).

Я сделал что-то вроде:

public function onContentBeforeDisplay($context, &$row, &$params, $page=0)
    {
        // $row->text has the article text ...
        if (preg_match('/{contact-form}/', $row->text))
        {
            require_once(dirname(__FILE__) . DS . 'tmpl' . DS . 'default.php');
        }
    }

Но этот код вставит default.php в начале. Я хочу заменить его в теге {contact-form}.

Спасибо.

Ответы [ 4 ]

0 голосов
/ 12 декабря 2014

Если вам нужно заменить какую-либо строку в серии файлов на удаленном сервере, и у вас нет на это времени!Вот ваше решение, надеюсь, оно кому-нибудь поможет.

 ////
 //PHP 5.3 + Class find and replace string in files
 //
 //by Bruce Afruz 
 //
 //2013
 //
 //example usage for single file:
 //
 //$new = new fileReplacement('./');
 //$new->setExt("check.php");
 //$new->changeContents("hello", "goodbye");
 //
 //example usage for multiple files:
 //
 //$new = new fileReplacement('./test');
 //$new->setExt("*.html");
 //$new->changeContents("hello", "goodbye");
 //
 //to change directory:
 //
 //$new = new fileReplacement('./test');
 //$new->setDir("./test2");
 //$new->setExt("*.html");
 //$new->changeContents("hello", "goodbye");
 ////


 class fileReplacement 
 {
  private $ext , $dir ;
  public function getDir() {
   return $this->dir;
  }
  public function setDir($dir) {
   $this->dir = $dir;
  }
   public function getExt() {
   return $this->ext;
  }
  public function setExt($ext) {
   $this->ext = $ext;
  }
 function __construct($dir) {
   $this->dir = $dir;
  }

  public function rglob($pattern = '*', $flags = 0, $path = '') {

  chdir($this->getDir());
  $paths = glob($path . '*', GLOB_MARK | GLOB_ONLYDIR | GLOB_NOSORT);
  $files = glob($path . $pattern, $flags);
  foreach ($paths as $path) {
  $files = array_merge($files, $this->rglob($pattern, $flags, $path));
  }
  return $files;
 }

 public function changeContents($replace , $sentence , $flags = 0, $path = '') {
 $all = $this->rglob($this->getExt() , $flags, $path);
 foreach ($all as $file) {

  $filename = $file;
  $handle = fopen($filename, "r");
  $contents = fread($handle, filesize($filename));
  fclose($handle);
  $contents = str_replace($replace , $sentence, $contents);

  if (is_writable($filename)) {
   if (!$handle = fopen($filename, 'w+')) {
    echo "Cannot open file ($filename)
";
    exit;
   }

   // Write $contents to our opened file.
   if (fwrite($handle, $contents) === FALSE) {
    echo "Cannot write to file ($filename)
";
    exit;
   }

   echo "Success, wrote content to file ($filename)
";

   fclose($handle);
  } else {
   echo "The file $filename is not writable
";
  }
 }
 }}
0 голосов
/ 10 февраля 2011

Вы можете создать файл PHP, который соответствует ключевому слову (например: foo.php), и просто извлечь ключевое слово из текста и использовать его для включения этого файла.

Например:

<?php
$str = "This is {foo} text";
$includePath = "/path/to/my/files/";

// Careful with the Regular Expression. If you allow chars like . in the
// keyword this could create a security problem. (Dots allow you to go backwards
// which would allow people to execute files outside your path.)
if (preg_match_all('/\{([\w]+)\}/', $str, $matches))
{
    foreach ($matches[1] as $_match)
    {
        $filePath = $includePath . $_match . ".php";
        if (file_exists($filePath))
        {
            include $filePath;
        }
        else
        {
            trigger_error("File does not exist '$filePath'.", E_USER_WARNING);
        }
    }
}
?>
0 голосов
/ 10 февраля 2011

Я думаю, вы просто хотите этого, не так ли?

<?php

$replacement = file_get_contents('myfile.php');

$content = str_replace('{foo}', eval($replacement), $content);

?>
0 голосов
/ 10 февраля 2011

Вы можете использовать функцию PHP "substr_replace()", детали которой приведены здесь . \ П ";

/* These two examples replace all of $var with 'bob'. */
echo substr_replace($var, 'bob', 0) . "<br />\n";
echo substr_replace($var, 'bob', 0, strlen($var)) . "<br />\n";

/* Insert 'bob' right at the beginning of $var. */
echo substr_replace($var, 'bob', 0, 0) . "<br />\n";

/**
 * Your food & search is here
 */
/* These next two replace 'MNRPQR' in $var with 'bob'. */
echo substr_replace($var, 'bob', 10, -1) . "<br />\n";
echo substr_replace($var, 'bob', -7, -1) . "<br />\n";

/* Delete 'MNRPQR' from $var. */
echo substr_replace($var, '', 10, -1) . "<br />\n";
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...