2

可能重复:
对象无法转换为字符串?

我需要为我的图像创建随机标题,但出现错误

MPRandomText 类的对象无法在第 42 行的 C:\Program Files (x86)\EasyPHP-5.3.9\www\dir.php 中转换为字符串

以及如何在我的 html 图片标题中包含随机文本?

    class MPRandomText
    {
    var $filepath;
    var $sepstring;
    var $fixchar;
    var $textfix;
    var $contents;
    var $random;
    var $errors;
    // initiate object and start functions
    function MPRandomText($filepath, $sepstring, $textfix)
        {
        $this->filepath = $filepath;
        $this->textfix = $textfix;
        $this->sepstring = $sepstring;
        $this->errors = "";
        $this->contents = "";
        $this->FileToString();
        }
    // read file contents into string variable
    function FileToString()
        {
        if (!$this->filepath || !file_exists($this->filepath))
            $this->errors = "Could not find text file at ".$this->filepath;
            else {
            @$filePointer = fopen($this->filepath, "r");
            if (!$filePointer) $this->errors = "Text file could not be opened.";
            if ($this->errors == "")
                {
                $this->contents = fread($filePointer, filesize($this->filepath));
                fclose($filePointer);
                if (!$this->textfix) $this->HTMLContent();
                $this->MakeArray();
                }
            }
        }
    // if importing an HTML page, drop everything outside of (and including) the <body> tags
    function HTMLContent()
        {
        $test = stristr($this->contents, "<body");
        if ($test !== false)
            {
            $test = stristr($test, ">");
            if ($test !== false)
                {
                $test = str_replace("</BODY>", "</body>", $test);
                $test = explode("</body>", substr($test, 1));
                if (count($test) > 1) $this->contents = $test[0];
                }
            }
        }
    // convert the file text into a list using separation character
    function MakeArray()
        {
        $array = explode($this->sepstring, $this->contents);
        if (count($array) > 0)
            {
            $this->contents = $array;
            $this->CleanTextList();
            } else $this->errors = "Text file contents are empty or could not be read.";
        }
    // clean up the list of empty values and extra white space
    function CleanTextList()
        {
        $result = array();
        if (is_array($this->contents))
            {
            for ($n=0; $n<count($this->contents); $n++)
                {
                $string = trim($this->contents[$n]);
                $test = trim($string."test");
                if (!empty($string) AND $test != "test") $result[] = $string;
                }
            if (count($result) > 0)
                {
                $this->contents = $result;
                $this->RandomString();
                }
            }
        }
    // get random text string from list
    function RandomString()
        {
        reset($this->contents);
        srand((double) microtime() * 1000000);
        shuffle($this->contents);
        $this->random = $this->contents[0];
        }
    // send finished results to be printed into HTML page
    function GetResults()
        {
        if ($this->errors != "") return $this->errors;
            else
            {
            if ($this->textfix == true) $this->random = htmlentities($this->random);
            return $this->random;
            }
        }
    }

//-------------------------------------------------------------------------------------------------
//  FUNCTION AND VARIABLE TO CREATE RANDOM TEXT INSTANCE
//-------------------------------------------------------------------------------------------------

// create variable to store instance references
$MPRandomTextHandles = array();

// function to create new handle and import random text
function MPPrintRandomText($MPTextFile = "random.txt", $MPSepString = "*divider*", $MPTextToHTML = false)
    {
    global $MPRandomTextHandles;
    for ($n=0; $n<250; $n++)
        {
        if (!isset($MPRandomTextHandles[$n]))
            {
            $MPRandomTextHandles[$n] = new MPRandomText($MPTextFile, $MPSepString, $MPTextToHTML);
            break;
            }
        }
    print($MPRandomTextHandles[$n]->GetResults());
    return $MPRandomTextHandles[$n];
    }


    /* Начало конфигурации */
$thumb_directory = 'img/thumbs';
$orig_directory = 'img/imag';
/* Конец конфигурации */
$allowed_types=array('jpg','jpeg','gif','png');
$file_parts=array();
$ext='';
$title='';
$title1='גילוף פסלים בעץ';
$i=0;


/* Открываем папку с миниатюрами и пролистываем каждую из них */
$dir_handle = @opendir($thumb_directory) or die("There is an error with your 
image directory!");
$i=1;

while ($file = readdir($dir_handle))
{
/* Пропускаем системные файлы: */
if($file=='.' || $file == '..') continue;
$file_parts = explode('.',$file);
$ext = strtolower(array_pop($file_parts));

/* Используем название файла (без расширения) в качестве названия изображения: */
// $title = implode('.',$file_parts);
// $title = htmlspecialchars($title);
include_once("GetRandomText.php");
$MPTextFile = "random.txt";
$MPSepString = "*divider*";
$MPTextToHTML = false;
$title = MPPrintRandomText($MPTextFile, $MPSepString, $MPTextToHTML);

/* Если расширение разрешено: */
if(in_array($ext,$allowed_types))
{

/* Выдаем каждое фото: */
echo '<li>
        <a href="'.$orig_directory.'/'.$file.'" rel="lightbox[pasel]">
            <img title="'.$title.'" src="'.$thumb_directory.'/'.$file.'" width="72" height="72" alt="גילוף פסלים בעץ" />
        </a>
    </li>';
}
}
/* Закрываем папку */
closedir($dir_handle);
4

1 回答 1

2

$title 是 MPRandomText 的一个实例。您在输出中连接 $title 但 MPRandomText 未实现 __toString(),因此无法将其转换为字符串。

<?php 
$title = MPPrintRandomText($MPTextFile, $MPSepString, $MPTextToHTML);
// MPPrintRandomText returns an instance of MPRandomText

/* Если расширение разрешено: */
if(in_array($ext,$allowed_types))
{

/* Выдаем каждое фото: */
echo '<li>
    <a href="'.$orig_directory.'/'.$file.'" rel="lightbox[pasel]">
        <img title="'.$title.'" src="'.$thumb_directory.'/'.$file.'" width="72"     height="72" alt="גילוף פסלים בעץ" />
    </a>
</li>';
// concatenating $title here will fail because MPRandomText does not implement __toString()
}
}
?>
于 2012-04-27T11:00:18.973 回答