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

【PHP】下らねぇ質問はID出して書き込みやがれ 105

レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん2011/03/17(木) 04:00:34.11ID:???
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 104
http://hibari.2ch.net/test/read.cgi/php/1297669559/
◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】

◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)

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

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

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0926nobodyさん2011/04/27(水) 18:18:34.43ID:???
>PHPで書かれたバッチファイル
バッチファイルをPHPを使って書き出すというわけだな
0927nobodyさん2011/04/27(水) 18:45:45.98ID:???
>>923
/home/hoge/ ディレクトリのパーミッションを確認。
テキストファイルのオーナーをfugaにするというのは、/home/hoge/ 配下のままオーナーをfugaにするのか、
それとも/home/fuga/ 以下に設置した場合なのか。

Unable to fork は子プロセス起動エラーなのでブラウザからアクセスした場合にexecできなかったことを示す。
cronでそのPHPのバッチファイル?を直接実行したのならforkエラーは出ない。
09289232011/04/27(水) 19:50:18.85ID:1DO68SdU
>>924 >>925
すみません。
お恥ずかしい。。。

>>926
バッチファイルをPHPで記述しています。
で、そのバッチファイルが/home/hoge/下にある
テキストファイルを読み込んでいます。

>>927
> /home/hoge/ 配下のままオーナーをfugaにするのか、
こちらになります。

不思議なことに同じ状況で何度かブラウザからアクセスしてバッチの起動を試すと
Unable to forkが出ずにexecもしっかり実行されていることもあります。
0929nobodyさん2011/04/27(水) 19:52:09.91ID:???
レン鯖とか?プロセス数制限されてたりとか?
0930nobodyさん2011/04/27(水) 20:07:28.44ID:???
すまん>>929は忘れてくれ・・・
09319232011/04/27(水) 20:08:44.45ID:1DO68SdU
レンタルサーバではないので、プロセス数に関しては
制限を設定した覚えはないので、初期値のまんまだと思います。

プロセス数の制限はどの辺を確認すればよろしいのか教えて頂けますか?
すみません。。。
0932nobodyさん2011/04/27(水) 21:50:07.27ID:???
ちゃんと実行できる場合があるということは、権限の問題じゃないわけだな。
0933nobodyさん2011/04/28(木) 08:34:11.77ID:???
>>932
ファイルのオーナがhogeだとエラーは1度もでないのですが、
fugaだと必ずエラーが出て、何度か同じ状況で試すと
エラーがでないことがあるという状況なんです。

ですので権限が関係あるのか無いのか
いまいちピンとこない状況です。。。

ちなみにブラウザでアクセスしたときに
呼ばれるPHPと、そのPHPから呼ばれる
バッチファイルのPHPのオーナーは
fugaで、/home/fuga/配下にファイルがあります。


09349232011/04/28(木) 08:35:07.94ID:zJffplQy
すみません。IDをだし忘れました。
0935nobodyさん2011/04/28(木) 08:48:40.57ID:???
hogeとかhugaとか分からん
要点を極限まで絞って質問してくれ
0936nobodyさん2011/04/28(木) 10:11:40.00ID:???
とりあえずパーミッション777にしてみろ
0937nobodyさん2011/04/28(木) 10:12:08.22ID:???
>>933

問題となっている事項を再整理してから質問してください。
再度の質問をする際には、>>1 を読み返してください。

09389232011/04/28(木) 10:28:28.42ID:zJffplQy
改めてまとめてみました。

【OS名】CentOS
【PHPのバージョン】5.1
【連携ソフトウェア】MySQL

ブラウザからアクセスがあったら
/home/fuga/aa.phpがapache上で実行され
このプログラムから
/home/fuga/batch.php
をexecで実行します。

/home/fuga/batch.php

/home/hoge/aa.txt
を読み込むのですが、

/home/hoge/aa.txtのオーナーが
fugaだとexec実行時に「Unable to fork」とエラーが表示されます。
ただ、同じ状況で何度か試してみると、
稀にエラーが出ずに実行されることがあります。
apcheユーザのクーロンから/home/fuga/batch.php
を実行すると上記エラーは1度も出ませんでした。

/home/hoge/aa.txtのオーナーが
hogeの場合でもそういったエラーは1度もでませんでした。

/home/hoge/aa.txtはパーミッションを常に777にした状態でも
上記のような現象が出てしまいます。

原因が掴めず途方にくれております。よろしくお願いします。
0939nobodyさん2011/04/28(木) 10:51:42.73ID:???
>>938
exec の部分を可能な限り晒してくれ
0940◆oDupeixhZv52 2011/04/28(木) 11:12:17.72ID:???
includeで動くようにして逃げれば? 重くなるだけだし。
09419232011/04/28(木) 11:40:12.72ID:zJffplQy
>>939
execは以下のような感じで記述しています。
よろしくお願いします。
exec('/usr/bin/php /home/fuga/batch.php arg1 arg2 >> /tmp/fuga.log 2>&1 &');


>>940
バッチを外部起動にしているのは、
バッチ処理が動いている間にクライアントを待ち状態にしないためになります。
includeにしちゃうと、バッチが終了するまで、
クライアントを待たせちゃうような気もするのですが、
そのことを「重くなる」と表現されているのでしょうか?
0942nobodyさん2011/04/28(木) 11:40:14.61ID:???
>>938
exec() を popen() で置き換えて何のエラーが返ってくるか調べてみたら?
どっちも同じコードを使ってプロセスを起動しているから
0943nobodyさん2011/04/28(木) 12:22:05.15ID:5jyOsFLH
whileでファイルを1行ずつ回した時に、
長い行があり、
allowed memory size of〜と出ますが、
このエラー出ても後続の行を処理する方法はないですか?

0944nobodyさん2011/04/28(木) 12:35:40.26ID:3JBHsj5i
memory_limitを増やす
0945nobodyさん2011/04/28(木) 12:36:58.15ID:zoh8QsmK
しかないですよね・・・orz
結構お客さんに無茶ブリされてますわ
0946nobodyさん2011/04/28(木) 12:47:53.59ID:???
それはコードが貧弱なだけで無茶ブリとは言わない
freadやfseekで改行位置探ればいいだけ
0947nobodyさん2011/04/28(木) 13:51:44.39ID:???
一行の長さが不明なのに一行ごとに読み込むとかアフォですか
一行が1TBとかあったら大抵のシステムでエラーでるわw
0948nobodyさん2011/04/28(木) 13:52:55.86ID:zoh8QsmK
>>947
その1TBを読み込んでくれと言われてる状態
0949nobodyさん2011/04/28(木) 13:59:59.91ID:???
>>948
具体的に質問にしたら誰かいいアイディア出してくれるかもよ
0950nobodyさん2011/04/28(木) 14:03:09.70ID:???
メモリの上限まで読み込めんで、処理した後破棄すれば?
0951nobodyさん2011/04/28(木) 14:07:56.13ID:???
処理内容によるけどバイト単位でできないのか
0952nobodyさん2011/04/28(木) 14:22:34.75ID:???
>>948
だから少しずつ読めばいいだろうが
while内でどんな処理をしたいのか知らんけど、
ファイル読み込みルーチンのアルゴリズムくらい自分で工夫しろよ
0953nobodyさん2011/04/28(木) 15:25:16.41ID:???
>>948
メモリに入りきらない長い行があるファイルって何さ?
whileで行ごとに処理とか言ったら、テキストっぽいけど……
テキストなら、一行で1TBもあるとか、
改行コード指定を間違ってるとしか
09549232011/04/28(木) 15:39:04.83ID:zJffplQy
>>942
poepnを使ってエラーを再現してみたところ、
Cannot allocate memory
と表示されていました。

PHPのmemory_limitは512Mになっていたので
いったん無制限にしたところ、エラーがでなくなりました。

ただ、topコマンドで見る限り、
そもそも/usr/bin/php /home/fuga/batch.phpは
せいぜい数十MBしかメモリを消費しないので、
なんでメモリのエラーがでたのかが不明なのと、
オーナーがfugaに変わると、エラーが出ていたのかが
わかりません。

その上再度PHPのmemory_limitを512MBにしても
エラーを再現できなくなってしまいました。

Cannot allocate memoryっていうのも初めて見たので
memory_limitをいじることが正しかったのかといったところも
不安ではあります。
0955nobodyさん2011/04/28(木) 15:47:57.12ID:???
考えてるのと別の理由でエラーが出てるんじゃないの?
偶然memory_limitを変更したらエラーが出なくなったため、それが原因と思い込んでるとか。
オーナー変更云々もそう。
0956nobodyさん2011/04/28(木) 16:15:01.84ID:???
面白いぞw
ttp://hibari.2ch.net/test/read.cgi/hp/1296016577/580-
09579232011/04/28(木) 16:23:23.51ID:zJffplQy
>>955
そうですよね。

自分でも別のところに原因があるんじゃないかと
思いつつも、全く原因に思い当たる節が無いので
困っているところです。。。

今日はphp.iniの設定を変えたことで
apacheの再起動をしているんですが、
そのあたりも関係しているのかとか
考えているところです。
09581/22011/04/28(木) 16:27:36.11ID:6tXmcG0P
<?php
$category = $_REQUEST["category"];
$no = $_REQUEST["no"];
?>
<html>
<head>
<title>sample02</title>
</head>
<body>
<?php
if($category == 1){
print "あなたはカテゴリー${category}にいます。<br>";
if($no == 1){
print "あなたはNO.${no}番のいいちこを選びました";
}
}
if($category == 2){
print "あなたはカテゴリー${category}にいます。<br>";
if($no == 2){
print "あなたはNO.${no}番の大五郎を選びました";
}
}
?>
<p><a href="parameter2.html">戻る</a></p>
</body>
</html>

(こちらを借りさせていただいてます)
ttp://plog.pya.jp/program/php/lesson09/sample02.html
09592/22011/04/28(木) 16:31:40.00ID:6tXmcG0P
>>958のプログラムではカテゴリが2つありますが、
カテゴリを増やしたいときに

if($category == 3){
print "あなたはカテゴリー${category}にいます。<br>";
……

とまた繰り返して書かずにすむ方法はありますか
うまく言えませんがお願いします
0960nobodyさん2011/04/28(木) 16:38:18.85ID:6tXmcG0P
>>959です
++と繰り返し文でできる気がしました
今やってきますのでできなかったらまた来ます
すみませんでした
0961nobodyさん2011/04/28(木) 17:19:54.77ID:6tXmcG0P
つまずいたので戻ってきました

$rs = mysql_query("select * from main where category_id = [あああ] order by count desc",$con);

「main」テーブルの中の「category_id」フィールドが1(,2,3…)のものだけ表示したいと思ってます
[あああ]の部分は++とか使えないと思うんですけど、どうしたらいいでしょうか
説明が下手ですみません
0962nobodyさん2011/04/28(木) 17:21:09.14ID:???
between 1 and 3

PHP関係ないけどね
0963nobodyさん2011/04/28(木) 17:29:07.52ID:6tXmcG0P
>>962
ありがとうございます!
またがんばってきます
0964nobodyさん2011/04/28(木) 17:52:42.13ID:???
1の時に1、2の時に2出したいのかな
それならただ単に$categoryを文字列につなげればいいだけだが
09659232011/04/28(木) 18:56:59.50ID:zJffplQy
php.iniの設定を変えたり元に戻したりで
apacheの再起動を行ってから
エラーが再現できなくなりました。

それ以外の設定ファイルは何も触っていないので
apacheの再起動が関係しているのかな・・・と
勝手に思っているのですが、
そろそろお手上げになりそうです。。

ダメもとでも構いませんので
確認しておいたほうがいい所があれば
教えて頂けないでしょうか。
0966nobodyさん2011/04/28(木) 21:52:27.46ID:???
/var/logの中身
0967nobodyさん2011/04/28(木) 22:03:15.85ID:cPVEaxyS
Webプログラムでなくサーバの設定の問題なのかもしれませんが、お願いします。
SNSサイトでログイン認証を行う場合に、ログイン画面だけはhttps、ログイン後はhttpというサイトがあったのですが、
これはどのような仕掛けで行っているのでしょうか。

認証画面に飛ばすサンプルはぐぐれば見つかりますが、その時に特に「httpsに飛ばせ!」のような記述は見当たりません。
どのようにして(誰が?)、このページはhttp、こっちのページはhttps、という選別(?)をしているのでしょうか。
0968nobodyさん2011/04/28(木) 23:39:43.25ID:???
>>967
ログインフォームのaction部分にhttps指定するだけ
その後httpsじゃない通信したければheader("Location: http://sample.com/");とかで移動させるだけ
0969nobodyさん2011/04/28(木) 23:56:01.73ID:???
その動きって今警告でないっけ。
httpsからhttpに移動しようとしてるけどいいのか?みたいな。
0970nobodyさん2011/04/29(金) 00:12:47.61ID:84jXJbM/
カウンターを作るときファイルに書き込むときはファイルロックをする
アクセスログを記録するときはファイルロックはしない

前者はロックしないと壊れる
後者は追記していくので壊れることは無い

こういう認識でいいでしょうか?
0971nobodyさん2011/04/29(金) 00:17:40.07ID:???
>>970
×壊れる
○正確なカウントができない
0972nobodyさん2011/04/29(金) 00:33:35.34ID:???
ファイル名変更でカウントするのかなりいいよ
ロックする必要もない
0973nobodyさん2011/04/29(金) 01:13:07.60ID:???
それも正確になるかは微妙
名前取得と書き換えの間に次のプロセスで名前取得が起きた場合とか
0974nobodyさん2011/04/29(金) 02:34:05.16ID:???
ログも壊れるよ
ログを書くスレッドを一個用意すればいいよ
0975nobodyさん2011/04/29(金) 06:05:06.91ID:???
>>968->>969
おお即レスありがとう。
やっぱり知ってれば単純な設定なんですね・・書くまでもないってことかぁ。
0976nobodyさん2011/04/29(金) 10:48:59.87ID:???
そろそろ次スレの時間か
0977nobodyさん2011/04/29(金) 13:07:02.38ID:???
ログイン時だけhttpsはセキュリティ的にアウトなんじゃなかったっけ?
そのせいでgithubとかが全てhttpsになるように変えたと思うんだけど・・・
0978nobodyさん2011/04/29(金) 14:01:23.16ID:???
>>977
そんなものはシステム次第
ログイン情報さえ守れれば良いなら、ログイン時だけでいい
0979nobodyさん2011/04/29(金) 14:36:33.70ID:???
セッションキーが漏れるからログイン時だけじゃダメ
0980nobodyさん2011/04/29(金) 16:09:37.61ID:???
次スレ立てとくか
09819802011/04/29(金) 16:11:44.99ID:???
たてれんかった
だれかたのむ
0982nobodyさん2011/04/29(金) 16:41:25.35ID:???
やなこった
0983nobodyさん2011/04/29(金) 16:43:03.43ID:???
ファイル名変更でカウントするのかなりいいよ
ロックする必要もない
0984nobodyさん2011/04/29(金) 16:43:43.17ID:???
DBの権限が無いだけなのでは
0985nobodyさん2011/04/29(金) 16:44:10.89ID:???
$_SERVERに入ってちゃまずいのか?
そういうもんとして受け入れるしかないだろ
0986nobodyさん2011/04/29(金) 16:44:26.78ID:???
それはただのライブラリだ
0987nobodyさん2011/04/29(金) 16:45:01.78ID:???
なぜ同じになると思ったの?
0988nobodyさん2011/04/29(金) 16:45:27.68ID:???
ありがとうございます
PDOのがいいんですね
これからPDOを使うことにします
0989nobodyさん2011/04/29(金) 16:46:42.57ID:???
こういう無意味な荒らしする奴の心情がわからないわ
そして連投規制(笑)
0990nobodyさん2011/04/29(金) 16:48:17.22ID:???
読んで
0991nobodyさん2011/04/29(金) 16:48:34.40ID:???
デコードされないように追加変換する事にした。
ファイル名の変更は現実問題として無理なのでNGです。
0992nobodyさん2011/04/29(金) 16:49:00.83ID:???
そうでもない。
0993nobodyさん2011/04/29(金) 16:49:40.21ID:???
コンテナかね
0994nobodyさん2011/04/29(金) 16:50:49.30ID:???
非推奨関数使いすぎだボケ
0995nobodyさん2011/04/29(金) 16:51:17.41ID:???
なんとなくだけど、Aero無効、もしくはオーバーレイを無効にしてみたらどうだろうか。
0996nobodyさん2011/04/29(金) 16:52:27.61ID:???
それだとPHPがHTML返しているのが原因。
0997nobodyさん2011/04/29(金) 16:53:53.83ID:???
ドメイン変えてみたら?
0998nobodyさん2011/04/29(金) 16:56:38.99ID:???
誰か新スレ立ててけろ
0999nobodyさん2011/04/29(金) 16:57:50.90ID:???
立てれんかった。誰かよろ。
1000nobodyさん2011/04/29(金) 16:59:12.45ID:???
Cookieの件ですが解決しました
まさかサブドメインにアンダーバー(_)が入っているとIEで使えないとか・・・。
いい勉強になりました
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。