トップページphp
1001コメント327KB

【PHP】下らねぇ質問はここに書き込みやがれ 50

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2007/07/11(水) 17:50:01ID:fYd+34US
まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り

◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 49
http://pc11.2ch.net/test/read.cgi/php/1182794620/

◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。

◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0753nobodyさん2007/07/23(月) 15:28:23ID:???
perlでの文法で下のような事をphpでやりたいんだけどえらい人教えてください
$count = 1;
$addr = "000.000.000.000"
↑のデータをファイルとクライアントから取得したと仮定

↓やりたいのはここから
chomp($count);
$count ++;
$hoge[0] = "$count"."\t"."gmt";
push (@hoge,$addr);
open (OUT,">data.txt");
 foreach (@hoge) {
  print OUT "$_\n";
 }
close OUT;

作りたいのは簡単なアクセスカウンターです
ファイルから読み込みデータを配列に格納することはできたのですが、
カウントアップから複数行の書き出しのところで躓いてます。
0754nobodyさん2007/07/23(月) 15:33:24ID:???
>>753
とりあえず>>1

今日から夏休みなんだよなぁ・・・
厨が増えそうで怖い・・ってか流れからしてもう増えてるな
07557532007/07/23(月) 16:24:58ID:???
ごめん、首つってくるわ。
perlスレにいくからごめんな
0756nobodyさん2007/07/23(月) 18:10:40ID:???
>>755
とりあえず>>1

今日から夏休みなんだよなぁ・・・
厨が増えそうで怖い・・ってか流れからしてもう増えてるな
07576922007/07/23(月) 18:13:09ID:6p0coLtT
すみません、誰か>>692の質問に答えてもらえませんか
>win + php + mysql4or5 で開発してる方に聞きたいです。
>phpの文字コードとmysqlの文字コードを何に設定していますか?

>また、phpとmysqlの文字コードって統一する必要はないんでしょうか?
07587532007/07/23(月) 18:34:20ID:???
うぜーー門前払いにされたんだけどよ
ここでやっぱり聞きます。
おしえてください。よろしくたのんます。
0759nobodyさん2007/07/23(月) 19:09:19ID:???
>>758
とりあえず>>1

今日から夏休みなんだよなぁ・・・
厨が増えそうで怖い・・ってか流れからしてもう増えてるな
0760nobodyさん2007/07/23(月) 19:14:50ID:6p0coLtT
>>759
>厨が増えそうで怖い

お前も似たようなもんだろが
0761nobodyさん2007/07/23(月) 19:29:18ID:???
>>753
chompはtrimかrtrim
PHPの関数は基本的に値渡しなのでtrim($count)だけではだめ
$count = trim($count);
のように戻り値を受け取らないといけない
pushはarray_pushがあるけどそもそも配列使う必要ないよ
$count = trim($count);
$fp = fopen("data.txt", "w");
fwrite($fp, $count . "\t". "gmt" . "\n" . $addr . "\n");
fclose($fp);
0762nobodyさん2007/07/23(月) 19:47:12ID:???
>>757
俺の場合はlinux - php5 - mysql5だけど
utf8が通らないなんてあり得ないので、必ずどこかで設定ミスしてわけわからん事になっているはず。

一通りまとめられている解説サイトでも見ながら(自分にあったものを検索汁 :あとはスレの >>1 のリンクとか)
「一つずつ」 順を追って確認しながら作業してみ。

確認箇所
・php.ini
・my.cnf
・DB
・ソース内のFORMのPOST部分のソース
・ソース内のinsert部分

そもそも
mysql> SHOW VARIABLES LIKE 'character\_set\_%';
でちゃんとutf8になっているか?
0763nobodyさん2007/07/23(月) 20:02:19ID:???
>>759
自分のこと言ってるんだねw
07647572007/07/23(月) 21:23:42ID:6p0coLtT
>>762
ありがとうございます いろんなサイトをもう3日見てまわってます
文字コードの設定は 
mysqlは
+--------------------------+-------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
+--------------------------+-------+
PHPは
mbstring.http_output UTF-8 UTF-8
mbstring.internal_encoding UTF-8 UTF-8
となっています。

また、mysqlにcmdからinsert文で日本語のデータを入れて、
それをPHPで表示するとやっぱり化けています。
つまり、少なくともPHP→mysqlの登録部分でのエラーではないみたいですが…
なにが悪いんだろう
0765nobodyさん2007/07/23(月) 21:51:49ID:???
>>764
cmd周りは、詳しくないが、
windowsの、コマンドプロンプトって、デフォルトが SJISだから、
それで日本語つっこむと、SJISの日本語がそのまま入ってしまうんじゃ? ([client]default-character-SET=utf8 の場合)

cmd上で、
chcp 65001 ってすると UTF-8になるけど、日本語がこの状態で正しくつっこめるかどうかはしらん

とりあえず、
hoge.php と適当なファイルをUTF-8作って、 埋め込みで

$a = "日本語";
//$aのinsert文実行
//select文実行
echo [selectしたデータ]
みたいな感じの処理を書いてみてブラウザで表示してみれば?(ブラウザのエンコード自動判定も、右クリックでUTF-8に変更する)
0766nobodyさん2007/07/23(月) 22:09:21ID:???
参考にならないかもしれないけど、俺のとこの環境だと
mysql_query('set character set utf8');
で全て解決する。
07677572007/07/23(月) 22:56:30ID:6p0coLtT
>>765-766
ありがとうございます
試しに登録側のPHPを以下にしたらうまくいきました
<?php
extract($_POST);
$db=mysql_connect('localhost','root','pw');
mysql_select_db('peartest');
mysql_query("SET CHARACTER SET utf8");//この行を追加
if($name != ""){
$sql = "insert into dbtest values(0,'$name')";
mysql_query($sql);
}
?>

自分は、mysql_query("SET CHARACTER SET utf8");は読み取り側にすべき機能なのかと
思っていたんですが、送り側にもするものなんですね(>>766さんもそうなんですか?)
これは、「これから送るデータはutf8で保存しろ」という命令と考えていいんでしょうか?
そうすると結局全てのPHPスクリプトに書き込まなきゃいけなくなりそうですが、、

その「全部にイチイチ書く」のを避けるために my.iniにskip-character-set-client-handshakeを
指定するといろんなサイトに書いてあったのに、そのやり方じゃうまくいきませんでした。。
なんでだろ、もういいかなぁ…
0768nobodyさん2007/07/24(火) 00:01:05ID:???
そもそもインサートしようとしているデータが本当にUTF-8なのか疑問だ
0769nobodyさん2007/07/24(火) 00:02:08ID:N6M16q3q
OSはWinsows
Apache 2.2.4、MySQL 5.0.41、PHP 5.2.2を使用しています。

以下のものを、掲示板のトップページにfunction dispTitleList($pid)
という関数を使って、ツリー表示をしたいと思っています。
改善点を教えていただけませんでしょうか。お願いいたします。
07707692007/07/24(火) 00:03:10ID:N6M16q3q
<?php
// DBへ接続
$con = mysql_connect('localhost','root','')
or die('Cannot connect<br>');
mysql_select_db('cdcol') or die('Cannot select<br>');

// titelとidの一覧を取得
$query = "select titel,id from cds";
$result = mysql_query($query);
if (!$result) {
$mes = 'Error : ' . mysql_error() . "<brn";
$mes .= 'Whole query : ' . $query;
die($mes);
}

// titelを一覧表示しつつ、それをidを渡すリンクタグで囲む
echo "<ul>\n";
while ($data = mysql_fetch_assoc($result)) {
// リンクタグを出力
echo "<li><a href='cdcol_desc.php?cdid=".$data['id']."'>";
// titelを表示
echo $data['titel'];
// リンクタグを閉じる
echo "</a>\n";
}
echo "</ul>\n";

mysql_close($con);
?>
0771nobodyさん2007/07/24(火) 00:10:39ID:VTvHCDnM
PHPのパターンマッチで、perlの「$`」、「$'」に相当するものを探して
います。

preg_match($pattern, $string)でパターンマッチした後で、$string中で
「パターンに一致した前の部分」「パターンに一致した後の部分」を取り出す
一番簡単な方法は何になるでしょうか?

07727572007/07/24(火) 00:15:30ID:HjFYaxsC
>>768
どういうことなんでしょう?
PHPの場合なら、保存形式utf-8のPHPファイルのフォームからinsertする
文字はutf-8になるんじゃないですか?
または、cmdなら、 たとえばこのテキストボックスにinsert文を書いて、
それをペーストするような時に文字コードが関係するものなんでしょうか?

かなり初心者な質問かもしれないですが、おねがいします
0773nobodyさん2007/07/24(火) 00:19:42ID:qzMpiZVa

$hoge_array [0] = "hoge1";
$hoge_array [1] = "hoge2";

$body = preg_replace('/([0-9]+)/', $hoge_array[$1], $body);

要は置き換え文字列を、後方参照値を使って引用したいんだが、
$1が展開してくれない。
''を使ってくくっても配列の中じゃシンタックスエラーになる。

誰かいい方法ない?
答えられたら神と崇めます。
0774nobodyさん2007/07/24(火) 00:53:18ID:???
>>772
>>768じゃないけど

php.iniもUTF-8で設定しているようだし、DB側もutf8だから

フォームのあるhtmlが、

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="content-language" content="ja" />

てちゃんと設定してれば大丈夫だと思うが。

不安だったら
POSTで渡した変数ではなく、
UTF-8のソースに、2バイト文字をべた書きしたものをinsertしてみて実験してみれば。

問題を切り分け、調査する時は、極力問題を単純化して調べるのがコツ
0775nobodyさん2007/07/24(火) 01:20:07ID:???
>>772
どこで見たか忘れたけど(MySQLのあるバージョンから?)外部(PHP)と接続した時に、
iniやcnfの設定にかかわらず文字コードがLatin-1になってしまって日本語が扱えないとか。(バグ?)
PHPで接続した時に
$db->exec('set names utf8');とか
mysql_query("SET CHARACTER SET utf8");とかを実行して、
いちいち文字コードを指定してやれば大抵大丈夫なようです。
07767572007/07/24(火) 01:38:50ID:HjFYaxsC
>>774
ありがとうございます
登録のPHPにフォームと関係なく mysql_query("insert into dbtest values(0,'しいたけ')"); を
実行したんですが、やっぱり化けていました
(mysql_query("SET CHARACTER SET utf8"); を解除した時)

>>775
ありがとうございます
やっぱりイチイチ文字コード指定ってやり方じゃなきゃダメっぽいですね
ダメバージョンを使ってしまってるようです… 

いろいろアドバイスをくれた皆さんありがとうございました。
MYSQLを入れなおしてみます、PHPの質問と少しずれてすみませんでした。
どうもありがとう
0777nobodyさん2007/07/24(火) 04:54:55ID:0up0b4iV
for($i=0;$i<10;$i++){
print "<input type=\"hidden\" name=\"hID\" value=\"$dID[$i]\">";
print "<input type=\"submit\" name=\"cmd_Delete\" value=\"削除\">";
}
削除ボタンが押されたら押された場所のdIDをhIDに入れたいんだがこれでは出来ないのか・・・
なんか他の方法ありますか?
0778nobodyさん2007/07/24(火) 06:19:53ID:???
経過した時間を表示するにはどうすればいいんでしょう

○時○分から○時間○分 経ちました と表示したいんですけど、教えてください
0779nobodyさん2007/07/24(火) 08:47:32ID:???
>>778
開始と終了、それぞれをstrtotimeでUNIXタイム型に変換してから差を求める。
それを60で割ったり、3600で割ったり。
0780nobodyさん2007/07/24(火) 08:50:53ID:???
>>779
3600って、どういう意味ですか?
0781nobodyさん2007/07/24(火) 08:55:11ID:???
>>780
3600秒で一時間だろ?
0782nobodyさん2007/07/24(火) 09:10:37ID:???
>>778
これだけならJavaScriptが最適
07837532007/07/24(火) 09:22:09ID:Wdyxg0H6
>>761
ありがとうございます
perlと似ているだけに少し使い方が違ったり、同じような動作をするのに
いくつも似たような演算子があったりと少々戸惑っていました。
おかげさまで納得のいくものができました。

ちなみに配列は同一IPをカウントしないために2行目からIPを格納するのに使っています。
while使うと\nばかりが延々続いた膨大なデータファイルが出来上がり、なぜこうなるのか
今の自分では理解できないです。

ただforeach使ったら狙った動作をしてくれたのでとりあえずは良しとし、これからwhileの謎を解明しようと思ってます。
遅レスで申し訳ないですが、ありがとうございました。
0784nobodyさん2007/07/24(火) 09:25:13ID:???
>>781
すげー、その発想は無かったわ。
0785nobodyさん2007/07/24(火) 10:47:54ID:???
工エエェェ(´д`)ェェエエ工
0786nobodyさん2007/07/24(火) 10:53:13ID:???
>>784
あきれた
0787nobodyさん2007/07/24(火) 11:21:03ID:???
>>777
for($i=0;$i<10;$i++){
print "<form meghod=\"post\" action=\"this.php\">";
print "<input type=\"hidden\" name=\"hID\" value=\"$dID[$i]\">";
print "<input type=\"submit\" name=\"cmd_Delete\" value=\"削除\">";
print "</form>";
}

みたいに1個ずつFORMタグで囲まないと、全部のhiddenが送られちゃうでしょ。
GETで良いなら、<a href="this.php?delete_id=".$did(略
で簡単に済む。
消すIDを送るだけならPOSTする必要はない。

あとはsubmitのnameで渡しちゃって
PHP側でnameをごにょごにょする方法もある。

でも削除なら、チェックボックスにするのが一般的。
そうすれば一気に消したり出来る。
0788nobodyさん2007/07/24(火) 11:42:14ID:???
>>777
ほらよ

<script language="JavaScript" type="text/JavaScript">
<!--
function setval(val){
document.form.hID.value = val;
document.form.submit();
}
//-->
</script>
<form name="form" method="post" action="./0.php">
<input type="hidden" name="hID">
<?php
for($i=0;$i<10;$i++){
?>
<input type="button" value="削除" onclick='setval(<?=$i;?>)'>
<?php
}
?>
</form>
<?php
echo $_POST["hID"];
?>
0789nobodyさん2007/07/24(火) 13:04:06ID:???
phpの中からfind path -exec phpfunc {} \;
みたいなこと(見つかった結果をひとつひとつphpの関数に投げる)したいんですが
どうすればいいですか?
07907892007/07/24(火) 13:07:13ID:???
あ、解決しました。すみません。
07917892007/07/24(火) 13:10:30ID:???
>>789
騙るのやめて貰えますか?
07927892007/07/24(火) 13:19:51ID:H27wi0OE
引き続き回答お願いします。
>>790-791騙りは臣でいいよ^^;
0793nobodyさん2007/07/24(火) 13:20:44ID:???
>>789
ひとまず>>1をお読みください
07947732007/07/24(火) 13:21:32ID:qzMpiZVa
>>773
誰も答えられないのかよ。
俺も含めてここの奴はたいした事ねえな。
0795nobodyさん2007/07/24(火) 13:23:09ID:???
>>789
説明不足じゃない?やりたい事がいまいち分からない。
phpのソース内で関数を使えばいいって答えじゃ駄目なの?
0796nobodyさん2007/07/24(火) 13:26:05ID:???
>>794
偉そうなのは結構だが$1ってどこから出てきたのよw
07977772007/07/24(火) 13:42:58ID:28scIEzF
>>787
ありがとう.formタグで囲めばよかったのか(汗
やはり削除とかはチェックボックスのが良いな.サンクス
07987892007/07/24(火) 13:48:24ID:H27wi0OE
質問内容が解決できればなんでもいいです。
アドバイスおねがいします。
07997892007/07/24(火) 13:49:26ID:H27wi0OE
>>794
わたしもたまに回答者にむかつきますがここは冷静になりましょうよ
08007892007/07/24(火) 13:50:45ID:H27wi0OE
てか$1って・・・参照できるわけねえだろばかwwwwwwwwwwwwwwwwww
0801nobodyさん2007/07/24(火) 13:54:15ID:???
>>789
array_walk?
0802nobodyさん2007/07/24(火) 13:55:58ID:???
>>798-800
楽しそうですね
0803nobodyさん2007/07/24(火) 13:56:21ID:???
>794

もっといい やり方も あると思いますが

$body = "abc 0 ABC 1 zzz";
echo "$body\n";

function call_back($n) {
  $hoge_array[0] = "hoge1";
  $hoge_array[1] = "hoge2";

  return $hoge_array[$n[0]];
}

//$body = preg_replace('/([0-9]+)/', $hoge_array[$1], $body);

$body = preg_replace_callback('/([0-9]+)/', call_back, $body);

echo "$body\n";

神と崇めていただかなくて結構なので
その態度を改めていただけないでしょうか
0804nobodyさん2007/07/24(火) 13:59:26ID:???
ああ 1つ訂正
下のほうにある call_back は single quotation で囲んでください
でないと notice レベルの警告が出ます
0805nobodyさん2007/07/24(火) 14:17:58ID:PuYDSgkH
配列の先頭からn個の要素を削除したい場合
どうしたらいいですか?
0806nobodyさん2007/07/24(火) 14:23:21ID:Y3Stxh5i
phpからデータベースにSQL文でデータを更新したいんですが
数字を入れるフォームを空にして更新するとエラーなってしまいます
文字型は入れなくてもエラーになりません
0807nobodyさん2007/07/24(火) 14:30:06ID:???
>>805
array_splice
0808nobodyさん2007/07/24(火) 14:33:44ID:???
>>806
intはNULL指定が必要
0809nobodyさん2007/07/24(火) 14:57:29ID:???
他の質問スレではID出しを強制されたりしないのに
何故このスレでは強制されるんですか?
こんな悪習を続けていたらPHPerはケツの穴が小さいと思われますよ
ID出さなくても、答えたい人は答える、答えたくない人は答えない
それでいいじゃないですか
0810nobodyさん2007/07/24(火) 15:01:24ID:???
>>808
intに空を入れようとすると自動的に「0」にならなかったっけ?
0811nobodyさん2007/07/24(火) 15:02:44ID:CE11c5Qj
$_SESSIONが空の状態で、
セッションIDでセッションを取得して$_SESSIONに格納する方法はありますでしょうか?
URLにID付加をするのではない方法であればお願いします。
0812nobodyさん2007/07/24(火) 15:03:18ID:???
>>810
デフォルトを設定していないとそうはならん
0813nobodyさん2007/07/24(火) 15:04:28ID:???
>>811
あまりの意味不明な日本語すぎて吹いた
0814nobodyさん2007/07/24(火) 15:05:45ID:???
>>811
最初にマニュアル読むように
引用
session_name() は、カレントのセッション名を 返します。name を指定した場合、カレントの セッション名は、その値に変更されます。
0815nobodyさん2007/07/24(火) 15:05:54ID:Y3Stxh5i
>>812
NULLを指定しても反映されません
デフォルトで設定するにはどうしたらいいんでしょうか
0816nobodyさん2007/07/24(火) 15:08:51ID:z1nZ//nw
誰かsqlite2系のコマンドライン版でBSDでコンパイル出来るやつ
知りませんか。
PHP4のモジュール版sqliteで2系のDBを作ってしまったとです。
0817nobodyさん2007/07/24(火) 15:11:13ID:z1nZ//nw
>>815
MySQLならカラム作るときにDEFAULT NULLだったと思います。
そすれば、何も入れなきゃNULLになるです。
0818nobodyさん2007/07/24(火) 15:14:14ID:???
>>815
> NULLを指定しても反映されません
設計段階でNOT NULL指定してないだろうな?

本来は設計段階で設定すべきだが…
ALTER TABLE [テーブル名] ALTER COLUMN [カラム名] SET DEFAULT [デフォルト値];
08197732007/07/24(火) 15:23:47ID:???
>>803
preg_replace_calllbackは後方参照値が取れないから使ってなかったけど、
そういうやり方があったんですね。

解決しました。
ありがとうございました。
0820nobodyさん2007/07/24(火) 15:36:48ID:???
>>809
話を摩り替えてますよ、あなた。
ルールですから。
0821nobodyさん2007/07/24(火) 15:44:05ID:???
>>809
ID無しで質問するのも、それに回答するのも自由はあるよ、やればいいじゃん。
ただ、ニセモノが頻発するので推奨してるだけ。
0822nobodyさん2007/07/24(火) 15:44:39ID:???
何のためのルール?
誰が得するの?
0823nobodyさん2007/07/24(火) 15:50:03ID:dkSuvKse
はじめまして。
どこにでもありそうな質問で恐縮です。

Apacheで.htaccessを使ったBasic認証のサイトがあります。
この中でパスワード変更のフォームを動かしていてきちんと動くのですが、
当然といえば当然で、パスワード変更して.htaccessを変更した瞬間に
次のリクエストでブラウザからは再度認証ダイアログが出てしまいます。

これを回避するためのテクニックってどういうのがあるでしょうか?
アドバイスいただければ助かります。
0824nobodyさん2007/07/24(火) 15:50:07ID:Y3Stxh5i
>>818
それはどこに入れるんですか?
0825nobodyさん2007/07/24(火) 15:50:58ID:???
>>809
別にケツの穴が小さいと思われても俺に不都合があるわけないしどうでもいい
テンプレもマニュアルもまともに読めない。
アンカーすらまともに使えない厨が多くてカオスになったからそうなったんじゃね?
実際テンプレどおりやってる奴の質問は追っていきやすいのは事実だしな
08268222007/07/24(火) 15:54:42ID:???
>>821を読んで納得しました。
無駄にからんで申し訳ありません。
心を入れ替えます。
08278092007/07/24(火) 16:02:52ID:???
夏休みにはいったばかりではしゃぎ過ぎました。
荒らして申し訳ありませんでした。
心を入れ替えます。
0828nobodyさん2007/07/24(火) 16:02:59ID:???
>>823
板違い UNIXかLINUXあたりの板のWEBサーバー関連で聞くように

>824
SQLのコマンドラインで実行
ちなみに君も板違いDB板で聞くように
08298092007/07/24(火) 16:06:49ID:???
偽者が多いですね…
ケツの穴が小さいルールが偽者を作りだしているように思えてなりません
他のスレではIDがなくても偽者が出たりしませんから…
0830nobodyさん2007/07/24(火) 16:09:00ID:???
PHPは簡単で習得しやすいから利用ユーザーの年齢層がバラバラで
そのうちの>>809みたいな夏厨とかが偽者で書き込む。
それを防ぐためにID強制
08318232007/07/24(火) 16:09:53ID:???
自己解決しました



みたいなやつが出てくるからね
別にトリップでもいいんだけど
0832nobodyさん2007/07/24(火) 16:24:24ID:???
var_dumpで巨大なオブジェクトを表示しようとしたら
途中で表示を打ち切られた(><)
前までそんなことなかったのに
最近新しいオプション出来たの?
08338232007/07/24(火) 16:24:48ID:dkSuvKse
すみません。まだ解決していません。

>>828
そちらの板ではWeb系の話はとんと・・・
ここの板でよいと思うのですが、確かにPHP限定の話ではないです。
どなたかわかる方、ポインタだけでもお願いします。
0834nobodyさん2007/07/24(火) 16:25:07ID:Wdyxg0H6
perlでいうループ制御のlast、next、redo って有効じゃないのですか?

$hoge に30行ほどの文字列が格納されている
そのうち10行を書き出したい

$kazu = '1';
foreach ($hoge as $val) {
 if ($kazu > 10) {
  last;
 }
print "$val\n";
$kazu ++;
}

としても最後まで書き出されてしまいます。
last,next,redoに変わるものがあるのでしょうか?
0835nobodyさん2007/07/24(火) 16:29:13ID:Y3Stxh5i
>>828
すいません
コマンドラインってのはどこにあるんでしょうか?
0836nobodyさん2007/07/24(火) 16:35:13ID:???
>>834
breakとcontinueならある
0837nobodyさん2007/07/24(火) 16:38:01ID:Wdyxg0H6
>>836
ありがとう。助かりましたm(_ _)m
0838nobodyさん2007/07/24(火) 16:42:43ID:???
>>834
forで0〜9までまわしたら?
0839nobodyさん2007/07/24(火) 16:48:22ID:???
>>773

後方参照値の変数展開は
\\1 or \$1 とかじゃなかったっけ? 単純にミスタイプか?
08408392007/07/24(火) 16:58:29ID:???
>>839
だめだったすまん
0841nobodyさん2007/07/24(火) 17:32:11ID:???
>>829
結構前はそれで平和にやっていた。
しかし、>>830の言う流れでこうなった。

これは随分前からの流れなのでしょうがない。
嫌ならID無しにどんどん答えてあげればいいじゃない。
0842nobodyさん2007/07/24(火) 17:49:33ID:???
>>840
eオプション
0843nobodyさん2007/07/24(火) 19:11:50ID:???
>>836
っていうか、continueっていうネーミングはおかしいだろ。
skipとかにしろよ。php作った奴で馬鹿???
0844nobodyさん2007/07/24(火) 19:16:04ID:???
continueはphpがオリジナルじゃないだろ
0845nobodyさん2007/07/24(火) 19:23:33ID:WZenHGY2
phpのファイルを読み込んで、
そこに定義されているクラスをリストアップするプログラムを書こうとしています
include→get_declared_classes
で、そのファイル中のクラスは判定できますが、
includeしたファイルに書かれたclass以外のプログラムも実行されてしまうのが
マズイです。
何かいい方法はないでしょうか?
実行せずにパースする方法があればいいのですが…
08468452007/07/24(火) 20:52:18ID:???
PEARのPHP_Parserつこうたらできました
なんかCatchable fatal errorが出まくりですが一応動作するようデス
0847nobodyさん2007/07/24(火) 20:59:09ID:???
>>844
そうですね
Cがオリジナルかと思ってます
Javaでも使ってます
>>843は・・・
0848nobodyさん2007/07/24(火) 21:00:23ID:???
file_get_contents なりで読み込んで、正規表現でパースすりゃいんじゃね?
0849nobodyさん2007/07/24(火) 21:14:12ID:???
>>848
その通りですが荷が重すぎます
単にclass hogeという文字を見つけるだけでは済まないので…
バッカス・ナウア記法とかなんとかサパーリ
0850nobodyさん2007/07/24(火) 21:18:17ID:???
おい、坊主!
大した技術もない癖に、調子に乗ってなめたこと書き込んでんじゃねーぞ、コラ!!!
0851nobodyさん2007/07/24(火) 21:22:17ID:???
>>850
誰にいってんの?きんもーっ☆
0852nobodyさん2007/07/24(火) 21:30:10ID:WZenHGY2
..が入っているファイルパスをクリーンにするいい方法ありませんか?
/hoge/moge/../fuga/poko
のようなパスから..をなくす感じです
■ このスレッドは過去ログ倉庫に格納されています