[PHP-users 3698] 配列変数から変数に取込んだ場合のちがいについて。

Shinichi Yamanaka php-users@php.gr.jp
Tue, 20 Nov 2001 19:58:28 +0900


山中と言います。
いつもお世話になっております。

複数のサーバーとFTPを使用してのファイル取得にPHPを使用しようと思い
以下のようにしました。

#!/usr/local/bin/php -q
<?
$settei=file("settei.txt");
$variable=explode(':',$settei[0]);
$user_name=$variable[0];
$ftp_server=$variable[1];
$ftp_user_name=$variable[2];
$ftp_user_pass=$variable[3];
$conn_id = ftp_connect("$ftp_server"); 
$login_result = ftp_login($conn_id, "$ftp_user_name","$ftp_user_pass");
ftp_chdir($conn_id,"aaa");
ftp_get($conn_id,"/tmp/aaa.tar.gz","aaa.tar.gz",FTP_BINARY);
ftp_quit($conn_id);
?>

実際は、複数サーバーとのやり取りなのでループ処理をしています。
上記スクリプトを、実行しますと
ftp_chdir: '': command not understood.
と、エラーがでてしまいます。
$ftp_server=$variable[1];
$ftp_user_name=$variable[2];
$ftp_user_pass=$variable[3];
に直接値を入れていた時は問題なく動いていました。
そこで、上記3つの代入式を
eval('$ftp_server='.$variable[1].';');
eval('$ftp_user_name='.$variable[2].';');
eval('$ftp_user_pass='.$variable[3].';');
に変更したところ、問題なく動いてくれました。

前置きが長くなりましたが、
$ftp_user_pass=$variable[3];
と
eval('$ftp_user_pass='.$variable[3].';');
で、echo文で変数の中身を表示させただけでは、違いが分かりませんでしたが
PHP内部の処理では、変数の扱い方が違うのでしょうか。
なぜ、挙動が違うのか理由が知りたいのですが、どなたかご存知ないでしょうか。

環境は
Laser5 Linux6.4
PHP 4.0.6
コンパイルオプション
./configure  --enable-mbstring --enable-mbstr-enc-trans \
--enable-mbregex --enable-track-vars --with-java=/usr/local/jdk1.3.1 \
--with-pgsql=/usr/local/pgsql --with-gd=/usr --with-imap=/usr \
--with-pdflib=/usr/local --with-jpeg-dir=/usr --with-tiff-dir=/usr \
--with-zlib-dir=/usr --enable-ftp --enable-namazu --without-mysql \
--enable-versioning

*******************
 Shinichi Yamanaka
yamashin@yabumi.com
*******************