-3

誰かが私のコードで何が起こっているのかを理解するのを手伝ってくれますか?プログラミングのエラーなのか、それともphpエンジンによるものなのか。以下は、私が非常に簡単にメールを送信するために作成しているクラスのコードです。
私が達成しようとしていること:- 単純なテキストからマルチパートメールで事前メールにメールを送信するために必要なすべてのタスクを実行するための関数を定義しましたプレーンテキスト、html形式、添付ファイル付き。

/*----------------------------------------------------------------------------------
   this function will take care of setting the mail depending users input what            he enters the message will be set up
 ----------------------------------------------------------------------------------*/
    public function set_mail_message($value)
{
$temp_message="";


// ----- detecting whether message submitted has html elements..]

if(strlen($value) != strlen(strip_tags($value)))
    {
    //...... message contains HTMLelements, so content type shud be 
    //....HTML type but for the compatiblity with older email clients
    //....we will set it to the both first html then plain text type..

    $temp_message.="This is a multipart message in MIME format";
    $temp_message.= "--".$this->boundary."\n";

    $temp_message.= "Content-type:text/html; charset=\"iso-8859-1\"\n";
    $temp_message.= "Content-Transfer-Encoding:7bit \n\n";

    $temp_message.= $value."\n";
    $temp_message.= "-- $this -> boundary \n";


//----------these codes from here-------------------------------

    $temp_message.= "Content-type:text/plain; charset=\"iso-8859-1\"\n";
    $temp_message.= "Content-Transfer-Encoding:7bit \n\n";
    $temp_message.= strip_tags($value)."\n";

 //--------------- upto HERE ARE OK................

//************ attach the attachment  prepared by function**********************/
        if($this->attachment_status == TRUE)
        {
        $temp_message.= "--".$this -> boundary."\n";

        $temp_message.= "Content-type: " . $Attachment_MIME_Type. "; \n name=\"$attachment_name\"\n";
        $temp_message.= "Content-Transfer_Encoding: base64\n\n";
        $temp_message.= $attachment_data."\n\n\";
        }       

    //----finishing the message configuration..........

    }
    else
    {
    // - ----content type is only PLAIN/TEXT---with or without attachmet-----
 //----------------BUT SAME CODES HERE FROM HERE :------------
    $temp_message.= '--'.$this->boundary.'\n';
    $temp_message.= 'Content-type:text/plain; charset=\"iso-8859-1\"\n'; 
    $temp_message.= 'Content-Transfer-Encoding:7bit \n\n';
    $temp_message.= $value.'\n';

//------------------UPTO HERE ARE SAME AS PREVIOUS BUT GIVING ERROR----------


//-------put attachment if set up by calling the set_mail_attachment function-------/
        if($this->attachment_status == TRUE)
        {
        $temp_message.= '--'.$this -> boundary.'\n';

        $temp_message.= 'Content-type: ' . $Attachment_MIME_Type. '; \n name=\'$attachment_name\'\n';
        $temp_message.= 'Content-Transfer_Encoding: base64\n\n';
        $temp_message.= $attachment_data.'\n\n';
        } 
        //----attachment has been put now close the boundary---

    $temp_message.= '--'.$this ->boundary.'--\n';
    }
$this ->message = $temp_message;

}



/*this function will take care of attchment and if this function is called and a 
atachment a selected only then the attachment part in set_mail_message() will be
defined*/   


   public function set_mail_attachment($value)
{

$attachment_data;

if(!empty($value) && file_exists($value))
    {
    $this -> attachment_status = TRUE;
//--here file type and file Name must be found somehow
//-- so that we can define them when seinding mail -------

    $Attachment_MIME_Type = 'image/jpeg';
    $attachment_name = 'attachment.jpeg';




    //------file must be read in binary format-------
    $file_resource = fopen($value,'rb')or die ('Error! There is an error in attachment');
    $attachment_data = fread($file_resource,filesize($value));
    fclose($file_resource);
    }

}

問題は:2つのポイントでコードにコメントされているように、コードは同じですが、2番目の部分では同じコードが解析エラーを生成します。これを解決するには、一重引用符で二重引用符を変更する必要がありますが、これらの両方の関数を呼び出すときにこれを行うと、引数を二重引用符で囲まれた文字列として渡してから、同じ解析エラーが発生します。二重引用符の代わりに一重引用符を使用すると、別のエラーが発生します:予期しない$end。。

私は自分のコードを何度もトラバースして、ネット上でも解決策を見つけようとしました。ただし、これのデバッグは成功しません。コードをテストできる場合は、自分でもテストしてください。問題を追跡できます。

私を助けてください..私の感謝

4

2 に答える 2

2

質問で、この行の後でコードブロックの色の書式が赤に変わることに気づきましたか?:$temp_message.= $attachment_data."\n\n\";

これ\"は、がエスケープ文字であり、実際には文字列を閉じていないためです。

そのはず:$temp_message.= $attachment_data."\n\n";

于 2012-09-10T18:13:42.163 に答える
1

私はあなたの問題がここにあるこの行だと思います:

$temp_message.= $attachment_data."\n\n\";

文字列リテラルの最後にあるバックスラッシュは、閉じている二重引用符をエスケープしているため、コードで解析エラーが発生します。

于 2012-09-10T18:14:55.650 に答える