• 締切済み

phpの対話型実行ツール?

関数の挙動を確認したいとき、対話型で実行できると便利だと思うのですが、そのようなツールはないでしょうか?あるいは、みなさんはどうやっていますか? 今のところ、echo '<?php echo str_replace("A","","ABC");?>' | php -q のようにしています。こういう単純なケースは、面倒なだけでまだ良いのですが、確認した値を使って次の動作をしたいときなど、どうしようもありません。 Ruby言語での対話型処理の例: $ irb irb(main):001:0> f=File.open('sample.txt','r') => #<File:sample.txt> irb(main):002:0> f.gets => "line 1 of file\n" irb(main):003:0>

  • notnot
  • お礼率77% (192/248)
  • PHP
  • 回答数4
  • ありがとう数7

みんなの回答

  • wp_
  • ベストアンサー率54% (132/242)
回答No.4

>少なくともphpで全体を書くか、あるいはそれでも無理か・・・ >phpソースを使ってphp本体と別のメインルーチンを作らないといけないのか・・・ 変数などのバッファはosの方で吸収してあげるしかないかもしれませんね。 phpコマンドで動かす以上はプロセスを一度区切らねばなりませんし・・ 動作をどこかで引っ掛ければ出来ないことも無いかもしれませんが、 phpにそんな機能があったかというとなかったような気もします。^^; メインプロセスを寝かせておいて別から引っ掛けて~とすれば出来ないことも無い気がしますが、やはりそういうツールは聞いたことないです。 ここは作るしか。(という無責任発言 ・・・使ったことないだけかもしれませんが^^; >質問に書いたとおり、書いたプログラムとテストというよりは、 >山ほどある関数の仕様の確認や、「この処理は、こういう方針で書けるのか」 >の裏取りを想定しています。 当方の場合はあまり使わない関数などに対してはphpのマニュアルを毎回読みますね。 strpos()とかmktime()とかin_array()とかよく引数の順番を忘れます^^; 「マニュアルに書いてあることが常に正」という前提の下であれば 裏取りは「実際に流す」より「PHPの仕様を確認する」というのが肝要かと思いますよ。 どうしても不安であればphpを構成する生コードを確認すればよいです。 確認方法としては環境によりますが、単体テストより前の製作段階でのテストは皆さんが言うとおりhttpを介して確認することが多いです。 バッチなどphpパーサが別のシステムでも、テスト用のルーチンをその場で即席で組んだりしますね。 実はそれらのゴミコード郡が結合テスト時に大活躍するのですが、それはノウハウの別の話ということで。 >初めての関数を使うときに、リファレンスを読んでの自分の理解が正しいかどうかって、 >実験して確かめたりはしないのでしょうか? リファレンスを読むってなんだろーうと思いましたがPHP機能のリファレンスとは別物ですな^^; 当方はもうお脳が駄目ですねorz ある程度の力を超えると「実験」をするということ自体しなくなる気がします。 関数を纏めて作ってテストして、駄目だったら「アー」と唸る。orz でも大抵は凡ミスなので一瞬で不具合は直る。 そうした方が早いというのを皆言わずとも理解している感があります。

notnot
質問者

お礼

アドバイスありがとうございます。 ご推察の通り、「リファレンス」=「リファレンスマニュアル」です。すいません。 phpさわるのは年に数回くらいなので、基本構文は覚えていても、関数はどんどん忘れます(覚えるつもりもないですけど)。 >「実際に流す」より「PHPの仕様を確認する」というのが肝要かと思いますよ。 すべてのケースについてのサンプルコードが書いてある訳じゃないので、実験したいケースはあります。ちょっといま例は思い出せませんが。 結局、対話型実行環境はメジャーな範囲では存在しないと言うことでしょうかね。

  • wp_
  • ベストアンサー率54% (132/242)
回答No.3

自分で作りましょう・・・と言うのもアレですかね。 当方はそういうツールは聞いたことがないです。 // rubyは変なツールがあるんですね・・・ cli限定であれば普通にshなどを書けば良いかと。 使ってるシステムによって書きかたは変わりますが・・・ phpが吐いた変数の扱いや見栄えの問題など工夫の余地はありますが、 基本は以下の感じでしょう。 #!/usr/bin/sh echo "php> " read com while [ "$com" != "exit" ] do eval $com | php -q echo "php> " read com done もしかしたら誰かが既に作っているかもしれませんが、 当方はこういう作り方を行ったことがないし これからもないので知りません。 // 文法テストなら-lで事足りるし、単体テストするのに一行ごと検査しつつやらねばならないほど仕様策定を甘くしないし・・・

notnot
質問者

お礼

すみません。ありがとうございます。 一行完結のケースについては、シェル関数で、 pp() { echo "<?php echo $*;?>" | php -q; echo; } などと定義しています。 ただ、「確認した値を使って次の動作をしたいときなど」を考えると、少なくともphpで全体を書くか、あるいはそれでも無理か・・・phpソースを使ってphp本体と別のメインルーチンを作らないといけないのか・・・というところだと思います。 特殊なニーズとも思えないので、すでにあるかなと思ったのですが。 無いんですかねぇ。 >// 文法テストなら-lで事足りるし、単体テストするのに一行ごと検査しつつやらねばならないほど仕様策定を甘くしないし・・・ 質問に書いたとおり、書いたプログラムとテストというよりは、山ほどある関数の仕様の確認や、「この処理は、こういう方針で書けるのか」の裏取りを想定しています。 初めての関数を使うときに、リファレンスを読んでの自分の理解が正しいかどうかって、実験して確かめたりはしないのでしょうか?

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

xamppをインストールしてますんで、そっちに置いて(http経由で)実行してますね。 #php4(まだ需要がある・・)/php5が切り替えられるし・・

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

httpサーバーとphpがすでに入っているという前提ですよね? エディタで書いて、http経由で接続すればよいのでは? そのうち欲がでてくれば統合環境まで視野にいれられると思います

notnot
質問者

補足

>エディタで書いて、http経由で接続すればよいのでは? ファイルに書く方法だと、php -q < file でいいので、ことさらhttpサーバー経由にする理由がないです。 現状では、「確認した値を使って次の動作をしたいときなど」は、そのようにファイルに順次、次の処理を書き足しながら、必要なところにecho等を入れたりして繰り返し実行して対応していますが、何とも面倒。 >そのうち欲がでてくれば統合環境まで視野にいれられると思います これが知りたいです。あまり大げさでない物。WindowsでもLinuxでもいいです。

関連するQ&A

  • PHPです2つのスクリプトの相違がわかりません

    PHPですが、以下の2つのスクリプトで同じ結果がでると思ったのですが現実は違いました。 henkan.php <html> <body> <?php $uketori=$_POST['UKETORI']; $uketori=str_replace("pen","pencil", $uketori); $uketori=strtoupper($uketori); print "$uketori"; ?> </body> </html> henkan2.php <?php $str=$_POST['UKETORI']; echo str_replace("です。","だよん。", $str) . "<br>\n"; echo "<br>\n"; echo mb_ereg_replace("です。","だよん。", $str) . "<br>\n"; echo "<br>\n"; ?> フォームに です。 という文字を入れたら変換されて だよん。 と表示さしたいのですが、上の2つで相違がでました。なぜなんでしょうか。 henkan.php では変換されませんでした。 henkan2.php では変換されました。

    • ベストアンサー
    • PHP
  • PHPの文字列をJavascriptの変数にする

    PHPの変数に格納された文字列を、直接Javascriptの変数の一部として格納しようと考えています。 例:) <script> var txt = "<?php echo $text; ?>"; </script> しかし、$textにダブルクォーテーションなどの文字が含まれていると、スクリプト全体が破綻します。今のところ、PHPの中で、問題を起こしそうな文字列を変換するように処理しています。 例:) $text = str_replace("\\", "\\\\", $text); $text = str_replace("\"", "\\\"", $text); $text = str_replace("\n", "\\n", $text); これよりもスマートな方法(たとえば用意されている関数を使うなど)がありますでしょうか。

    • ベストアンサー
    • PHP
  • PHPでサーバー上の書き換えたhtmlを上書き保存したい

    サーバー上のhtmlファイルをPHPで修正(不要データ削除)後に、上書きをしたいのですが、なかなかうまくいきません。上書きの方法を教えてください。 $data = @file_get_contents(\'./index.html\'); $data = str_replace(\'該当文字\', \'\', $data); echo $data; ここまでは出来ました。 残りはindex.htmlを上書きするだけなのですが。。

    • 締切済み
    • PHP
  • php 指定文字列以降の削除

    phpにて半角スペース以降の文字列を問答無用で削除するというプログラムを作ろうとしてるのですが上手くいきません。 どうすればできますでしょうか? ご教授のほどよろしくお願いいたします。 ---- ソースコード $str = '2017/1/1 10-28'; if (preg_match("/ /", $str)){ $replace = str_replace(' ', '', $str); } echo $replace;

    • ベストアンサー
    • PHP
  • 【PHP】書き込みできません

    PHP5.3の環境でファイル書き込みのロジックがうまくいかずに困っています。 環境は下記の通りです。 Apache 2.2.2 PHP 5.3.3 コードは下記の通りです。 >>CODE $file_path = "/home/xxxxx/logs/test.txt"; echo file_exists($file_path); echo "file_path1=".$file_path; if ( file_exists($file_path) ) { echo "file_path2=".$file_path; // ファイルポインタ取得 if ( ($fp = fopen($file_path, 'a')) !== FALSE ) { // ログは追記 echo "file_path3=".$file_path; // ファイルポインタに書き込み fwrite($fp, $date."\n"); fwrite($fp, $body); fwrite($fp, "----------------------------------------------------\n"); // ファイルポインタクローズ fclose($fp); $flg = true; } } <<CODE 権限は下記の通りです。 logs 777 test.txt 777 現象は下記の通りです。 echo文のfile_path1は表示されます。 echo文のfile_path2及びfile_path3は表示されません。 $file_path="/home/logs/test.txt";に変更すると、 echo文のfile_path1及びfile_path2が表示されます。 echo文のfile_path3は表示されません。 ファイルが存在することはlsで確認したので間違いありません。 権限も777にしているので、何がおかしいのか困り果ててしまい、初めて投稿させて頂きました。 PHPやApacheの設定ファイル等も問題あるのでしょうか。 どうぞご指摘お願いいたします。

  • PHP の2つの関数について

    お世話になります。 ディレクトリー内の要素が、さらにディレクトリーなのかあるいはファイルなのかを検証する簡単なルーティンを作っていますが、この中で使っている2つの関数の働きが、自分が理解していたようにならないので質問させていただきます。 (1) str_replace() について ファイルエクスプローラーからpath としてコピーしてきたディレクトリーのパスは次のようになっています。 "C:\xampp\htdocs\PHP-practice\testDir" この中にあるバックスラッシュ "\" 記号を、str_replace() を使って "/" に変えようとしましたが、次のようになってしまいました。 $direct ="C:\xampp\htdocs\PHP-practice\testDir"; $direct = str_replace("\\", "/", $direct); echo "========== ".$direct."<BR>"; 結果は: ========== C: mpp/htdocs/PHP-practice estDir つまり中ほどにあるものは変換されましたが、最初と最後は変換されず、しかも元のパスの一部が消えています。これはどうしたことなのでしょうか?これが最初の質問です。 しかし実際にはここで止まっている訳にいかないので、手作業で修正して先に進めました。 (2)readdir() について ディレクトリーの中をreaddir()で読んで、それがディレクトリーかファイルかを区別する簡単なコードですが、上手く行きません。 出力結果は次のように、ディレクトリーをファイルであると表示してきます。 ========== C:/xampp/htdocs/PHP-practice/testDir insideDir-1 is a file insideDir-2 is a file video1.mp4 is a file readdir() か is_dir()のいずれかの使い方がおかしいのでしょうか? これが2番目の質問です。 実際には testDir フォルダーの中身は以下の通りです。 testDir >> insideDir-1 >> new1.php >>insideDir-2 >> songPath.txt >> video1.mp4 以下に全体のコードを書きます。 <?php function read_directory($direct){ $direct = str_replace("\\", "/", $direct); echo "========== ".$direct."<BR>"; $handle = opendir($direct); $entry = readdir($handle); $entry = readdir($handle);// skip . & .. while($entry = readdir($handle)){ if( is_dir($entry) ) { echo $entry." is a directory<BR>"; }else{ echo $entry." is a file<BR>"; } }// while closedir($handle); return; }// function // ================ main program ================ $dirname="C:/xampp/htdocs/PHP-practice/testDir"; //手作業修正済み read_directory($dirname); ?> どなたかよいアドバイスを頂ける方がいらっしゃいましたら、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • y.phpをブラウザできない

    のですがどうしたらいいのでしょうか? y.php: <?php $txt="本日は青天なり。";//$txt="ok";ならば問題無 header("Location:x.php?txt=$txt"); ?> x.php: <?php $txt=preg_replace("|\s|",'',$_GET[txt]); echo "$txt<br/>"; ?> 日本語のため "Location:x.php?txt=$txt" の表記方法が問題だと思われますがどの様に修正したらいいのでしょうか?

    • ベストアンサー
    • PHP
  • 【Flash】PHPを使って変数を読み出し

    【count.php】にこのようなスクリプト記述。 動作はここで確認できます。 【ttp://flash-moe.yi.org/count/count.php】 <?PHP ini_set('display_errors', '1'); $file = file_get_contents ("./count.txt"); $file++; file_put_contents ("./count.txt", $file); $file = mb_convert_encoding($file, "UTF-7", "EUC-JP"); echo $file; ?> それを【LoadVars】を使って値を取得させるには どうしたらいいのか?教えてくださいm(_"_)m

    • ベストアンサー
    • Flash
  • PHPでheader情報がうまく表示できない

    ドコモ対応でXHTMLのヘッダー情報がうまく送れません。 PCからのテストで header('Content-Type: application/xhtml+xml'); をコード挿入すし、サイト表示の確認すると「ファイルのダウンロード 」ダイアログがでます。 header('Content-Type: application/xhtml+xml'); を入れずにテストするとダイアログはでません。 ・display.phpがメインページであくまでもskin.htmlをインクルードして置換しecho表示する感じなのですが・・・・・ 困っています。助けて下さい。 skin.html ----------------- <html> <body> <head> <!--%title--> </head> <body> コンテンツ </body> </html> ----------------- test.php -------------------------------------------------------------------------------------- 変数定義は省略 $html = file_get_contents($temp); $agent = $_SERVER['HTTP_USER_AGENT']; if(preg_match("/^DoCoMo/i", $agent)){ $html = str_replace( "<!--%title-->", $docomo, $html); header('Content-Type: application/xhtml+xml'); echo "$html"; } elseif(preg_match("/^(J\-PHONE|Vodafone|MOT\-[CV]|SoftBank)/i", $agent)){ $html = str_replace( "<!--%title-->", $softbank, $html); header('Content-Type: application/xhtml+xml'); echo "$html"; } elseif(preg_match("/^KDDI\-/i", $agent) || preg_match("/UP\.Browser/i", $agent)){ $html = str_replace( "<!--%title-->", $au, $html); header('Content-Type: application/xhtml+xml'); echo "$html"; } else{ $html = str_replace( "<!--%title-->", $other, $html); header('Content-Type: application/xhtml+xml'); echo preg_replace('/{.*?}/', '', $html); -------------------------------------------------------------------------------------- display.php ------------------------------------------ <?php $temp = "./skin.html"; require_once('./test.php'); ?>

    • ベストアンサー
    • PHP
  • php環境の妨げ(衝突)となるツール

    こんばんわ。 『10日で覚えるAjax』を材料に、javaspriptとphpの連携を 学んでいます。 ウェブサーバはhttpd(Apache)で、htmlファイルから ボタンのonclick時にあるphpファイル(sample.php)を読み込もうとしています。 たとえば、sample.php ---------------------------------- 渡されたパラメータは<b> <?php print ($_GET['str']); ?> </b>です。 ---------------------------------- となっていて、この結果がtxtで返ります。 この取得方法が有効であることは確認済みです。 しかし、他のPCではtxtファイルは読み込めるものの phpではエラーになることが分かりました。 このエラーを起こすPCには ・セカンドライフ ・スカイプ ・市販のパソコンゲーム がインストールされています。 (実際、スカイプのプログラムをいちいち切らないと Apacheさえ起動しません。) 環境構築・環境設定において、 何か衝突を起こしたり変数を書き換えたりする 原因はありますでしょうか?? よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう