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

【PHP】質問スレッドpart24【php】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん04/11/01 04:09:15ID:???
・PHP全般の質問スレです。 
・新規質問の方は上げてください。age進行でお願いします。 
・質問する際には環境も明記。 
・正しい日本語で分かりやすく。 
・レスがつかないからって逆切れする厨お断り。 
・解決しなくてもこたえてもらったら礼を。 


■本家 
 http://www.php.net/ ;

■日本 PHP ユーザ会 
 http://www.php.gr.jp/ ;

■PHP マニュアル 
 http://www.php.net/manual/ja/ ;

■PEAR マニュアル 
 http://pear.php.net/manual/ja/ ;

過去スレ, 関連スレ等>>2-4 
0207nobodyさん04/11/05 04:27:45ID:???
PHPマスター様の(,,゚Д゚)∩先生に質問です
$tset ="
<hr color=#6600ff>
_HTMLEND_;
require 'inc/test.php';
echo<<<_HTMLEND_
<hr color=#6600ff>
";
と書いたtest.incファイルを↓のファイル
<?PHP
// さっきのファイル読出し
require("../test.php");
echo<<<_HTMLEND_
<html><body>
あいうえお<br>
あいうえお<br>
あいうえお<br>
$tset
あいうえお<br>
あいうえお<br>
あいうえお<br>
<hr></body></html>
_HTMLEND_;
?>
てな感じで読み出したい・・・
変数の中に命令文を入れたら
動かないのは分かるのですが
どうすれば出来るのかわかりません
(´・ω・`)ショボーン
初心者ですいませんがお教えい下さい。
0208nobodyさん04/11/05 06:32:47ID:puzbyGUU
今日の寝巻きは赤でした
今日の寝巻きは黄でした
今日の寝巻きは緑でした

っというような文章があり、
色の部分だけ取り出して変数に入れるにはどうすればよいのでしょうか
入門書の正規表現のところを見ても英語の例しかなくうまくいきません
0209nobodyさん04/11/05 08:54:15ID:???
echo str_replace(array('今日の寝巻きは','でした'), '', '今日の寝巻きは赤でした');
0210nobodyさん04/11/05 11:01:51ID:???
foreach($a as $b) {
if ($b==$c) { array_merge($a,$d[$c]);
ここで現在のforeachループを破棄して、
もう一度最初から$aの評価をしたいのです。
($dの内容によっては無限ループに陥る
可能性があるのは目をつぶるとして)
どう書けば良いでしょうか。
0211nobodyさん04/11/05 11:18:35ID:???
$a = reset( $a );
0212nobodyさん04/11/05 11:19:25ID:???
miss
reset( $a );
0213nobodyさん04/11/05 11:26:53ID:???
>>210
do {
 foreach ($a as $b) {
  if ($b==$c) {
   array_merge($a, $d[$c]):
   break;
  } // endif
 } // endforeach
} while(TRUE)

かな?
このままだと常に無限ループだが、
中のforeachから抜けるには break 2; を使えばいい
0214nobodyさん04/11/05 11:29:35ID:vAMAiFLG
ttp://tohoho.wakusei.ne.jp/wwwperl2.htm
こちらのsocket関数の項目に書かれているスクリプトを自分の
スクリプトに組み込んでますが
自分の使っているサーバーでperl -wcでスクリプトチェックを行ったら
Unquoted string "stdout" may clash with future reserved word at aaa.cgi line 543.
このような警告文が表示されました。
select(stdout);
のstdoutをAAAとか別のものに置き換えたらこの警告文が回避できましたが
別のものに置き換えても正常に動くのでしょうか?
perlのバージョンはThis is perl, v5.8.2 built for i386-freebsdです。
0215nobodyさん04/11/05 11:32:48ID:???
>>214
残念ながらここはPHPスレだ。
021621404/11/05 11:34:45ID:???
>>215
申し訳ない
間違えた。。
0217nobodyさん04/11/05 11:39:20ID:???
>>212
うほ。なんて簡単。アリガ�クス

>>213
似たようなのを考えてた。
021821204/11/05 11:52:41ID:???
すまん。かなり嘘教えてた。
while( list( $key, $b ) = each( $a ) )
{
  if( $b == $c )
  {
   array_merge( $a, $d[$c] );
    reset( $a );
  }
}
で、どうだろう。
0219nobodyさん04/11/05 11:54:48ID:???
なんと break 2;でネスト2個抜けれるのか・・便利だ
022020404/11/05 12:22:22ID:ipfVcK1A
>>206
メール鯖のログは昨日みましたが,やはり何ものこっていませんでした.

mb_send_mailがbooleanを返すということでしたので、今試して見たところ,false
が返ってきています.
phpinfo()をすると,mbstringはenableで,sendmail_pathもちゃんと設定されています.
falseが返る原因として他に何が考えられるでしょうか?
0221nobodyさん04/11/05 12:36:58ID:???
>>218
うん。(笑)
試してみたら、resetではforeachはresetされなかった。
>218ならいけそうな予感。
でもいささか古めかしい書き方なのは、仕方ないかな。
無限ループ前提でbreak2で抜けるのとどちらが良いかは、
好みが分かれる所かな?
0222nobodyさん04/11/05 13:29:12ID:???
>>191
>mail関数使わずに、popen()でパイプオープンして内容を投げればええのかな?

そんな感じ。厳密には使ってるのはproc-open()だったり、オリジナルのqmail-queue
ではなかったりしてるけど。後は単純にqmail関係の話だから、そっちの資料(本もあるし)
を当たった方が良いよ。


0223nobodyさん04/11/05 13:49:41ID:???
1を4回echoしたいんだけど

while(4){echo "1";}

これではあかんのかな?
0224nobodyさん04/11/05 14:11:43ID:???
式( 4 ) が真である間 echo "1" を繰り返す、という文だね
0225nobodyさん04/11/05 14:13:42ID:???
$i = 0;
while($i++ < 4){echo "1";}
0226nobodyさん04/11/05 14:20:15ID:???
おお!そうするのか!
225を参考にforを使ったやつも考えてみた

for($i=0;$i<4;$i++){echo "1";}

うーん、いろいろ出来るね。サンクス>224-225
0227nobodyさん04/11/05 14:21:34ID:???
( ゚Д゚)ポカーン
0228nobodyさん04/11/05 14:34:33ID:???
これが噂のVB厨かな?
0229nobodyさん04/11/05 14:47:25ID:onIpwNyM
classとかfunctionって使ったほうがスクリプト自体はサクサクになる
んでしょうか?原理的には変わらん気がしますが。
それとも構造が分かりやすくて編集しやすいって利点のみ?

初心者なんでこれらを使わない方が作りやすいんですが・・・
0230nobodyさん04/11/05 14:48:28ID:???
一生初心者で終わる気なら気にしなくていいよ
0231nobodyさん04/11/05 14:54:19ID:???
>229
どっちもどっち。
作りやすいほうをどうぞ。
0232nobodyさん04/11/05 14:55:41ID:???
>>229
なんとなくfunction使うとちょっと遅くなってclass使うともっと遅くなる、ような気がする。
0233nobodyさん04/11/05 14:58:40ID:???
今じゃ、PCの性能UPしてるからソンナニ変わらん
class使うのは、再利用したい為と
共同開発するときに他人にも分かりやすくする為

どっちにしろ、初心者には関係ない
0234nobodyさん04/11/05 15:15:32ID:???
保守性・生産性を無視するならfunctionもclassもいらないなぁ。
しかし、使わないと吐き気が出るプログラムが出来そうだがw
0235nobodyさん04/11/05 15:20:26ID:???
PHP-5.0.2にPDFlib-Lite-6.0.0p1.tar.gzをいれようと思ってるんですが
PDFLib-Liteを入れた後、PHPを再コンパイルする際に、
--with-pdflib=/usr/localをつけたにもかかわらず、
インストールされないってどういうことでしょうか教えてください。
ちなみに、PHP-4.3.Xでは同じ方法でインストールできたと思います。
0236nobodyさん04/11/05 15:20:40ID:???
二度とそのファイルは開きたくないだろうな
0237nobodyさん04/11/05 15:49:11ID:???
>>235
PHP5に対応しているとはどこにも書いてないようですが?
使うな危険とも書いてないけど。
0238nobodyさん04/11/05 15:51:10ID:???
>>229
OOPできなくても、構造化プログラミングぐらいしてないと、
趣味プログラムでも後で泣くよ。
保守できなくて。

色々と工夫してclassとかfunctionとか作ってると、
新しいプログラムを作るときに
新たに書くコード量が減ってきていい感じになる。

functionとかclass使えば、
普通はパフォーマンス落ちるよ。

そのパフォーマンスの落ちが問題なのかどうかってのも、
普通は検討事項。

職業プログラムなら、悩むまでもなくパフォーマンス落ちを取る。
# そもそも気にするほど遅くならない
0239nobodyさん04/11/05 15:55:45ID:VQSnf7DD
PHPからSQLのデータをCSVファイルとしてダウンロードさせたいのですが
この時に列幅等指定できないのでしょうか?
0240nobodyさん04/11/05 16:08:36ID:???
>>239
列幅を扱えるようなCSVファイルなら、そのフォーマットにそって出力すればよい。
ただ、MS-ExcelのCSV出力のように列幅データを持たないものもある。
0241nobodyさん04/11/05 18:22:31ID:???
PHPのsession_start()ってクッキー使ってるんですか?
0242nobodyさん04/11/05 18:33:36ID:???
使う場合と使わない場合がある。
0243nobodyさん04/11/05 18:45:09ID:???
最近phpを勉強し始めました。
書籍買って、カウンターのコードサンプルみてふと思ったのですが、
perlの場合、lockしてるのをよくみかけますが、
phpではlockする必要ないのですか?
0244nobodyさん04/11/05 18:52:44ID:???
糞サンプル(初心者に分かりやすいように書いてる)だからロックしてないだけだと思われ。
ロックはしないとぶっ壊れるよ。
0245カポコン04/11/05 19:13:17ID:???
>>243
そういう糞スクリプト俺でさえ作らないのに…
どこの出版社よ?この際晒してみてよ。
0246nobodyさん04/11/05 19:23:43ID:???
入門書にまともなコードを書くやつはいない。
なぜなら、まともなコードを書くと入門書では紙面が足りないコードになるから。

一例を挙げれば入力のサニタイジングだって必須だけど省かれるし…・。
文字コードの色々な問題についても省くよね。

初心者になんでもかんでも説明するのは事実上不可能。
しかし、説明の無いコードが大量にあったら糞入門書だ。

つまり、入門書は雰囲気のみ。
実際に使えるコードなど無い。
0247nobodyさん04/11/05 19:41:36ID:QUoZnGJq
array_search で0番めの配列がヒットした場合、
ヒットしなかった時の値(false=0)が返って来ますよね?

みなさんはどうやって切り分けていますか?
0248nobodyさん04/11/05 19:45:12ID:???
>>247
!== と === 演算子
024924104/11/05 20:50:01ID:???
早速session_start()試してみたんですが、
クッキーオフにしたら機能しなかった・・・。
セキュリティリスク高いからできるだけクッキーは
使いたくなかったんですが、これはしょうがないのかな?
初歩的な質問スマソ
0250nobodyさん04/11/05 20:59:16ID:???
マニュアル。
0251nobodyさん04/11/05 21:05:23ID:???
>>249
勘違いしてるようだが、クッキーを使った方がセキュリティリスクが低いぞ。
もちろん、secureフラグを使用した場合だが。
025224104/11/05 21:06:23ID:???
了解、一個だけ質問ヨロシコ。
クッキーを使う場合についての注意点として、
・unsetを忘れない
・時間設定しておく
・パスワードなんかの重要情報は暗号化しておく
くらいしか思いつかないんだが、やばいですか?
025324104/11/05 21:08:19ID:???
>>251
secureフラグ、初耳でした。
SSL利用しないとクッキーはかなーり危険でしか?
0254nobodyさん04/11/05 21:08:44ID:???
セキュリティを考えるとセッションはCookie使うべき。
025524104/11/05 21:10:24ID:???
例えば、ドメイン取得で有名な http://www.value-domain.com/
はphpとクッキーでログインシステム管理してるみたいだけど、
SSL利用は必須としていないみたいでし。

0256nobodyさん04/11/05 21:13:20ID:???
必須としてないから何でしょう?
025724104/11/05 21:13:44ID:???
クッキーはGET使ってデータやり取りするより危険と思ってマスタ orz
0258nobodyさん04/11/05 21:14:09ID:???
CookieにはセッションIDだけを埋め込むのが普通。
025924104/11/05 21:23:22ID:???
おもっきりパスワードをCookieに埋め込んでましたが何か?



勉強しなおしてきます。ありがとうございました。
0260nobodyさん04/11/05 21:41:54ID:???
まあ暗号化してやり取りするならそれでもいいと思うが
0261nobodyさん04/11/05 21:45:38ID:???
Cookieに限らず、通信路を暗号化しておかないと全てにおいて危険はつきまとう.
無線LAN環境でパケットスニッフしてみると良く分かる.
0262nobodyさん04/11/05 21:54:28ID:???
まあ扱うデータにもよるが
0263nobodyさん04/11/05 22:01:00ID:???
>>239,240
列幅を扱えるCSVってどんなんだろう。。。
026419104/11/05 22:03:04ID:???
>>222
遅レスだけどサンクス。
popen()使ってたけどproc-open()なんてのもあるんだ。
知らなかった。。
0265nobodyさん04/11/05 22:08:57ID:???
値Aが値Bの倍数であった場合を真、そうでない場合を偽と判定するコードってどう書けば?
A%Bで出てきた値が1以上の整数だった場合を真とすれば出来そうだけど整数である事の判定の仕方が分かりません。
教えて下さい。
0266nobodyさん04/11/05 22:19:44ID:???
is_int
0267nobodyさん04/11/05 22:33:34ID:???
便乗だが、
COOKEI OFFにして
session_start();
print $PHPSESSID;
しても $PHPSESSIDが表示されないぽ。
なぜぽ?
COOKEI ONなら
正しく表示されるのに
なぜぽ?
0268nobodyさん04/11/05 22:35:31ID:???
クッケーキターーーーーーーーーー!!!!!!!!!!!
0269nobodyさん04/11/05 22:37:13ID:???
>>265

まず A >= B でなければ偽
さもなくば A == B なら1倍で真
さもなくばBと等しいか大きくなるまでAを足していって
ちょっきりBと等しくなれば真
残りは偽

0270nobodyさん04/11/05 22:38:22ID:???
>>267
session_start();
$PHPSESSID = session_id();
print $PHPSESSID;

じゃないの?
0271nobodyさん04/11/05 22:39:17ID:???
まちがえた

まず A >= B でなければ偽
さもなくば A == B なら1倍で真
さもなくば初期値0に対してAと等しいか大きくなるまでBを足していってちょっきりAと等しくなれば真
残りは偽
0272nobodyさん04/11/05 22:44:54ID:???
empty(A%B)

>>265
027327204/11/05 22:46:23ID:???
!A%B
でもいいのか。
0274nobodyさん04/11/05 22:56:42ID:???
>>270
それなりにありがとーーーーーーー
0275nobodyさん04/11/05 23:22:14ID:???
>>267
session.use_trans_sid を 1 にしれ.
もしくは自分でリンクに全部 <?=SID?> をつけれ.
話はそれからだ.
0276nobodyさん04/11/06 07:02:58ID:T75+ILHO
Windows上で動作しているPHPで、ミリ秒かマイクロ秒単位のsleep()をする方法はないでしょうか?
usleep()はWindows上だと動かないので(-_-)ウツ
027718704/11/06 12:04:59ID:???
>>189
>>190
>>191

アドバイスどうもです。
そんな感じの方法で少しがんばってみます。
共有サーバーでこんな思い処理やばいのは百も承知でっす。
でも、使うのは自分じゃないから何とも言えないけども。

1通毎にコネクション切らないで行う方法など、
とりあえずなんかしらで少しでも処理軽くする方法考えます。

popen()ついてですが、自分もなんかしらのソース探してみます。
道のりは長いですね・・・
0278nobodyさん04/11/06 12:11:31ID:???
スパムの提供か?
0279nobodyさん04/11/06 12:19:48ID:BQGFb7uF
なぜにスパムに!
そんなことするソフトだったら作らずともいくらでもあるような。

今回はデータ管理でせっかくアドレスもあるからメール送る機能も追加しといてってだけ。
作ってればあれもこれもと欲がでてくるみたい。
きりがないからこっちはお疲れモード。
0280nobodyさん04/11/06 12:23:30ID:veEoJvKd
$ls = `ls /home/abc`;
ってのをユーザabcから使ってみたんですが、
ls: `/home/abc': Permission denied
apacheのエラーログにというエラーが表示され、
結果を取得することができません。
perl-suEXECのときはこれでいけたんですが、
PHPってどういった権限で動いてるんでしょうか?
解決方法はありますか?
宜しくお願いします。
0281nobodyさん04/11/06 12:24:03ID:???
> 共有サーバーでこんな思い処理やばいのは百も承知でっす。
> でも、使うのは自分じゃないから何とも言えないけども。
こういう馬鹿のお陰で、今までいくつも便利なサービスが停止されていった。
自鯖でやれ、屑。
0282nobodyさん04/11/06 12:30:07ID:???
>>280
Apacheのモジュールで動いていれば実行はapache(wwwとかnobodyとか)になる。
PHPをCGI(suExec)で動かせばよい
028328004/11/06 12:41:02ID:???
>>282
なるほど、サンクスです。
ちなみにsudoで apacheにlsの権限を与えるのは危険過ぎですか?
危険過ぎっぽいですが。
028419104/11/06 12:42:54ID:???
>>281
便乗させてもらってる俺が言うのも何だが、激しく同意
028528004/11/06 12:44:31ID:???
スマソ。1つ追加質問です。
phpをCGIとして動作させるとモッサリするってのは
よく聞きますが、このモッサリするってのは
「動作が重くなる」に加えて、「負荷が高くなる」も含みますでしょうか?
当初、perlの方が作りやすかったんですが、
phpの方が負荷が低いからいいかなと思ってたんですが。
0286nobodyさん04/11/06 12:58:34ID:BQGFb7uF
>>281
>>284

ちょっと書き方が悪かったです。すいません。
今あれやこれやと検討中です。
もちろん自分としては、こんな重いもの共有サーバーでやりたくありません。
そのことについては何度も何度も説明しています。
もしそれでも相手話を飲んでくれないのでしたら、
一回の処理での上限数を決めるなりして、
処理が大きくなりすぎないようにこちらでするつもりです。

少しでもサーバーの処理を低減したいと言うことと、
上限を決めるにも一回の処理で多くこなせるに超したことはないので、
今回質問いたした次第です。

いくらなんでも、サーバーが悲鳴を上げるようなもの作るつもりはありませんので・・・
いろいろとすいませんでした。
0287nobodyさん04/11/06 13:06:23ID:???
>>277
ああ、じゃあ提示した案はどれも多分無理だぜ。
0288nobodyさん04/11/06 14:34:20ID:???
>>286
全部他人のせいにしてるみたいだが、共有サーバしか使えない発注元って何だ?
0289nobodyさん04/11/06 14:51:06ID:???
ある特定phpの実行時のエラーを画面に出さないようにするには
どうすればよいのでしょうか?
php.iniのdisplay_errorsを変更すると他のphpにも影響がでるので
Onのままです。
0290nobodyさん04/11/06 14:56:49ID:???
>>289
エラーが出ないように書けばいいだけじゃね?
0291nobodyさん04/11/06 14:57:04ID:???
>>289
関数で制御できるよ
error_reporting
0292nobodyさん04/11/06 16:37:25ID:RH6kTyyV
文字のコード番号を取得する方法ってありますか?
例えば'a'なら97(0x61)などです。
0293nobodyさん04/11/06 16:48:35ID:???
>>292
ord
マニュアル読め
0294nobodyさん04/11/06 16:52:00ID:RH6kTyyV
解決しました
0295nobodyさん04/11/06 16:53:58ID:RH6kTyyV
>>293
良く解らなかったのでマルチバイトまで対応させたり色々しました。
文字→数字というのは式では出来なかったので
 bin2hex($src);
を使いました。
こっちは16進数ですが、16進数が使いたかったので丁度よかったです。

他に方法があるならば教えてください。
お願いします。
029628904/11/06 17:44:18ID:???
>>291

ありがとうございます。
無事できました。
0297nobodyさん04/11/06 19:35:26ID:???
>>295
え?それなんか違わないか?
0298nobodyさん04/11/07 00:28:11ID:559ttViC
mb_send_mailがSMTPに実際にアクセスしているときにどのような
やり取りをしているのでしょうか?
もしくは,それが書いてあるような仕様書とかってありますか?

別にプログラムを作成してstdinからmb_send_mailの送信内容を読むと読めるのですが,To:[email protected]
の1行しか読めなかったり,ヘッダ全部を読めたりと動作がまちまちでよくわからないのですが.
029927204/11/07 00:30:25ID:???
つーか反応返せや。
教え損だわ、ホンマ。
0300nobodyさん04/11/07 00:42:34ID:???
>>298
ソース見れば一目瞭然。
仕様に関しては、
mb_send_mail
 | (使用しているSMTPサーバのマニュアル参照。メル鯖プログラムに依存)
MTA(phpが話すメル鯖)
 | (RFC参照。番号忘れた)
外部MTA
0301nobodyさん04/11/07 01:03:51ID:???
>>299
まぁその程度教えたぐらいで煮えるな。
もっとぐたぐた説明して反応返さないやつなんぞアホほどいる。
0302nobodyさん04/11/07 01:07:55ID:???
>>299
代わりに反応しておくとそのコードじゃ倍数判定は出来ない上、empty関数のコールは全くの無駄
0303nobodyさん04/11/07 01:08:52ID:???
これがやぶへびか
0304nobodyさん04/11/07 01:38:12ID:???
つか、普通に!A%Bだろ
わざわざempty持ってきて何がしたいんだ
しかも条件式1個答えただけでそこまで偉そうにされてもな
0305nobodyさん04/11/07 02:15:03ID:???
一応>>273も読んでやってくれ
0306nobodyさん04/11/07 02:39:02ID:???
>>298
マニュアルにも書いてある通りメール送信部分はmail()のラッパ。
mail()は普通にsendmail(もしくは互換のもの)に対してpopenして
パラメータを出力してるだけ。これはSMTPを話してる訳ではないよ
(Win32の場合は異なる。さっき見たらNetWareも違うな)
mail.c読んでごらん。mb_send_mailから追うならmbstring.cも。
0307nobodyさん04/11/07 03:49:37ID:tqDkdxs2
プロトタイプ宣言の類って無いん?
■ このスレッドは過去ログ倉庫に格納されています