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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/11/23(木) 00:27:02ID:???
PHPに関するくだらねぇ質問用スレです。ここならお前の下らない質問に回答があるかも知れません。

まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り

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

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

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

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

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ http://pc8.2ch.net/php/subback.html
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで http://pc8.2ch.net/db/subback.html
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
 しかし初心者が目的も定めずに速度を気にしたところでほとんど意味は無いぞ
0581nobodyさん2006/12/01(金) 11:47:43ID:???
http://jp2.php.net/manual/ja/language.basic-syntax.php
0582nobodyさん2006/12/01(金) 11:47:45ID:???
>>579-580
きみたちもう少しマニュアルとか読もうよ。
05835802006/12/01(金) 11:50:48ID:???
>>581
サンクスです

http://jp2.php.net/manual/ja/ini.core.php#ini.short-open-tag

やはり、short_open_tag を on にしていないと使えなかったんですね。

<? と ?> のショートタグは無効にしたい (XML宣言とかで邪魔になるし美しくないので) のですが、
<?php= みたいな方法で <?php echo を使いたいんです(´・ω・`)

やはりこれは無理なんですかね…。

0584nobodyさん2006/12/01(金) 11:51:38ID:???
>>579
とりあえず何が意外なのか書こうよ。
0585nobodyさん2006/12/01(金) 11:56:14ID:pNXMUOFK
ありがとうございました、マニュアル自分で探せばすぐでしたね。
横着はいけないなと・・。

ショートタグを活用したことが無かったので意外だったんですよね。
構文エラーじゃないのかと思った次第です。
<?=$test?>
0586nobodyさん2006/12/01(金) 14:56:38ID:???
Ver.5とかになってるphpでそれはないだろうw
0587nobodyさん2006/12/01(金) 15:04:13ID:???
ショートタグキライ
0588nobodyさん2006/12/01(金) 15:06:35ID:???
俺はつかいまくりんぐ。
0589nobodyさん2006/12/01(金) 15:19:11ID:???
俺も使いまくりだな。
まぁ、単純な置換でショートタグから普通の構文にできるんで、好みでやればいいかと
0590nobodyさん2006/12/01(金) 15:44:49ID:mT/4eJy6
質問です
FORMに数字しか入力させないようにしたいのですが
なんの関数を使えば良いでしょうか
0591nobodyさん2006/12/01(金) 15:47:39ID:???
ereg()
0592nobodyさん2006/12/01(金) 15:54:49ID:???
>>590
is_numeric()
0593nobodyさん2006/12/01(金) 16:02:12ID:NWvcMdwA
array_walk()ってarray_map()の自爆関数版?
0594nobodyさん2006/12/01(金) 16:05:26ID:mT/4eJy6
>>591-592
どうもでしたー
0595nobodyさん2006/12/01(金) 16:19:55ID:???
>>593
違うよ
0596nobodyさん2006/12/01(金) 17:17:14ID:???
本スレが全く機能していないのでこちらで質問します。

FPDFを使ってPDFファイルを作成しました。
index.html→ex.php(IE上でPDFが表示される)
は問題ないのですが、ブラウザで表示するのではなく、
ファイルとしてダウンロードさせようと思います。

それで、ex.phpの上部に
header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename="ex.pdf"');

と記述したのですが、ファイルのダウンロードが出来ません。
もしご存じの方は、どうすればいいか教えていただけないでしょうか。
0597nobodyさん2006/12/01(金) 17:32:40ID:???
<?php
$path_file="c:/httproot/hogehoge.pdf";
$content_length=filesize($path_file);
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment ; filename=aaa.pdf");
header("Content-Length: ".$content_length);
readfile($path_file);
?>
0598nobodyさん2006/12/01(金) 17:33:53ID:???
本スレなんてないはずだが?








と回答もしないであげ足とるなよおまえらw
0599nobodyさん2006/12/01(金) 17:34:34ID:???
ブラウザはMIME-Type(Content-Type)を判断して動作するから
Content-Typeを application/octet-stream に変えてやればいい
0600nobodyさん2006/12/01(金) 17:36:41ID:???
いやマジで気になる。本スレってどこ!?
0601nobodyさん2006/12/01(金) 17:49:43ID:???
俺がここが本スレと言ったところで、判断するのは結局お前自身なんだぜ?
0602nobodyさん2006/12/01(金) 18:11:28ID:???
はるか昔…
本スレとくだスレという、互いを意識しあう二つのスレが存在した。
本スレに住む住人は、「くだスレいらなくね?」と思い、くだスレに住む住人は、「本スレいらなくね?」と思っていた…
そんな拮抗した時代はもろくも崩れ去った…
本スレ住人とくだスレ住人の戦争が勃発したのである。
続く↓
06035962006/12/01(金) 20:25:17ID:???
>>597,599
ありがとうございます。
試しに597さんのソースをex.phpの上部に貼り付けて
$path_fileをプログラムがある場所を指定したのですが、
ダウンロードはされるものの、作成されたファイルを開けません。
(なので、作成失敗していると思います)
0604nobodyさん2006/12/01(金) 20:27:32ID:ZL9qk5lm
IDとパスワードでログイン認証してる会員制サイトがあるのですが、
あるユーザ(例えばID=10)がログインしてるとき、IP等だけでなく、
IDもapacheのログに追加出力するにはどうしたら良いのでしょうか??
IDの内容は$_SESSIONで持ちまわっています。

apacheのログ出力設定の何かをいじるのだろうと思いますが、
ググってもいまいち望みの結果が検索できませんでした。。。
0605nobodyさん2006/12/01(金) 21:11:34ID:???
Apacheのログ形式に成形したのに、
IDを付け加えた別のログを吐くしかないのでは?
0606nobodyさん2006/12/01(金) 21:17:25ID:???
phpでsetenvしてapacheで受け取れんの?
0607nobodyさん2006/12/01(金) 21:21:04ID:???
自作のphpにtelnetからPOSTで入力を試してるのですがうまく行きません。
phpはinput.htmlのsubmitボタンからhoge.phpを呼んでいます。
ブラウザーからはうまく行きます。

input.html
<form action="hoge.php" method=POST>
<input type="text" name="name">
<input type="submit" value="submit">
</form>

hoge.php
<?php
$fh = @fopen("piyo.txt","a");
fputs($fh,"$_POST[name] ああ\n");
fclose($fh);
?>
<a href="input.html">

telnetでの入力
telnet localhost 80
POST hoge.php HTTP/1.0
Content-Length: 6

name=1

と入力してます。しかしpiyo.txtには何も入力されずああが増えるだけです。
どなたか原因を教えてもらえないでしょうか?
0608nobodyさん2006/12/01(金) 21:34:29ID:???
>>604
別々にログとって、後で合体させるスクリプトでも書けばおk
0609nobodyさん2006/12/01(金) 21:58:33ID:???
apache_setenvを使えばカスタムログから参照可能
06106072006/12/01(金) 22:18:29ID:???
自己解決した。
Content-type: application/x-www-form-urlencoded
を入れるとうまく動いた。
06116072006/12/01(金) 22:21:35ID:???
自己解決した。
Content-type: application/x-www-form-urlencoded
を入れるとうまく動いた。
06126072006/12/01(金) 22:22:13ID:???
自己解決した。
Content-type: application/x-www-form-urlencoded
を入れるとうまく動いた。
0613nobodyさん2006/12/01(金) 22:46:46ID:???
>>607
良かったなぁ。
0614nobodyさん2006/12/02(土) 00:33:11ID:???
functionの中でwhileを使ってDB(MySQL内)のデータを出そうとしました。

function entry($val){
$con = mysql_connect(localhost, root, test);
$selectdb = mysql_select_db($DBNAME, $con);
$sql = "select * from datatable";
$rst=mysql_query($sql,$con);
echo "<select name=\"datalist$val\">";
echo "<option></option>\n";
while($row=mysql_fetch_array($rst)){
echo "<option value=\"$row[name]\">$row[name]</option>\n";
}
echo "</select>";
}

表示側は <? entry(1);?>などとしています。
<select name="datalist1"><option></option></select>は表示されるのですが、
whileの中が表示されません。どこがおかしいのでしょうか?
0615nobodyさん2006/12/02(土) 00:44:02ID:???
>>614
大して読んでないが
whileの中を

echo "<option value={$row['name']}>{$row['name']}</option>\n";
でテストして味噌
06166142006/12/02(土) 01:07:52ID:???
>>615
ありがとうございます。ただ、特に変わりないです・・・。
0617nobodyさん2006/12/02(土) 01:29:25ID:C/1Qwb+b
FC4にyumコマンドでphp-5.0.4をインストールしたのですが
zip関数を有効にするにはどのようにしたらよいでしょうか。
どなたかご教授頂けると恐縮です。
0618nobodyさん2006/12/02(土) 01:35:51ID:???
while の中で
print_r($row);
するとちゃんと値出る?
06196182006/12/02(土) 01:36:21ID:???
>>614あてね
06206142006/12/02(土) 01:42:30ID:???
>>618
いえ、出ません。そしてソースを見ると以下のようなエラーが出てます。

<b>Warning</b>: mysql_fetch_array(): supplied argument is not a valid MySQL
result resource in <b>C:\Program Files\Apache Group\Apache2\htdocs</b> on line <b>10</b><br />

たぶんwhile内のmysql_fech_arrayが読み込めないっぽいです。。
0621nobodyさん2006/12/02(土) 01:51:46ID:???
氏ね
0622nobodyさん2006/12/02(土) 01:55:11ID:???
http://www.php.net/ChangeLog-5.php
・Added RFC1867 fileupload processing hook. (Stefan E.)

これ実装した拡張モジュールってありませんか?
あと「PHPの本スレ」みたいなものはないんですか?
0623nobodyさん2006/12/02(土) 03:30:08ID:???
>>620
おいおい、先にエラー出てるって言えよ・・
そのエラー内容と出てる行があらば考えるか検索できると思うよ。

でmysql_fetch_array()でエラー出てるから、$conが問題なんじゃね。
DBにコネクト出来て無いとか

ttp://www.php.net/manual/ja/function.mysql-connect.php
の例を見てコネクトをチェックしなさい。

何で俺今日はこんな面倒見がいいんだろw
0624nobodyさん2006/12/02(土) 04:53:53ID:???
MySQLのあるフィールドの値に1加算する場合って
一旦mysql関数で現在値データ拾ってきて、それにphpで+1して
UPDATEするしか無理でしょうか?

直接MySQLへのクエリーのみで+1することは不可能でしょうか?
0625nobodyさん2006/12/02(土) 06:04:13ID:???
>>624
いくらなんでもMySQLを馬鹿にしすぎだろ

まぁ、PHPの話題ではないけどできるはずだ
0626nobodyさん2006/12/02(土) 06:24:15ID:???
それができないと、会員番号とかプログラム的に増やさないといけないし、
同時にリクエストきたらプログラム対応じゃ面倒だろうがw
0627nobodyさん2006/12/02(土) 06:24:50ID:???
update table1 set field1 = field1 + 1 where id = ・・・;
こんな感じだったっけ?
0628nobodyさん2006/12/02(土) 07:38:24ID:???
mysql系で質問してる奴、同一人物だろ・・・
sqlのマニュアルくらい読めよ
0629nobodyさん2006/12/02(土) 08:00:44ID:???
上の人とは別人ですが、
MySQLでorderというフィールドを作成して、
順番データを入れたいと思います。
それを参考に、phpで表示させる、という流れです。

今やってる苦肉の策は
指定データ(行)のorderの値だけ1加算する、というかたちです。
これだとorderが10のデータと順番を変えようと思ったら、
10回動作させなければいけません。

orderデータに一意性を持たせて、、、
みたいなことも考えましたが、いかんせんかなり面倒な感じになりそうです。

どんなロジックでいけばいいのかわからないのですが、
何かよい方法はないでしょうか。
0630nobodyさん2006/12/02(土) 09:23:47ID:???
>>629
orderが今10のやつを3に変更しようとしたら、元々3のやつを4に、4のやつを5に…と
全部ずらしていかないといけないって話?
update table set order = order + 1 where order >= 3 and oeder < 10;
update table set order = 10 where id = '元がorder=10のレコードのID';
の2回updateで終了の気がするけど。
0631nobodyさん2006/12/02(土) 09:29:46ID:???
>>630
下のsetはorder=3だった。まぁ分かるよね。
0632nobodyさん2006/12/02(土) 09:47:53ID:???
http://www.php.net/manual/ja/function.flock.php
>ロック中に flock()でブロックを行いたくない場 合は、operation に LOCK_NB を加えます。

LOCK_NBとは、これは具体的にどういう意味ですか?
マニュアルの説明文ではどうもよくわかりません。
0633nobodyさん2006/12/02(土) 09:48:57ID:???
perlのuse integerみたいな設定?ってphpにはないですか?
0634nobodyさん2006/12/02(土) 09:56:35ID:???
>>632
他のプロセスがflockしてるときにさ、

(1)LOCK_NB無しでflockしようとする時(通常)
他のプロセスがflockが終わるまで待機する。

(2)LOCK_NB有りでflockしようとする時
flockはあきらめて先に進む。
0635nobodyさん2006/12/02(土) 10:01:03ID:???
>>634
わかりましたどうも。
しかしそれって不完全で、あんまりflockしている意味ないですね・・。
0636nobodyさん2006/12/02(土) 10:02:40ID:???
使い方によるよ。君のロックの考え方が一辺倒なだけ。
0637nobodyさん2006/12/02(土) 10:04:34ID:???
>>635
flockは成功するとTRUE、失敗するとFALSEだから
LOCK_NBありのときは返り値を見て処理を変更するとか、
結構使いどころはあるよ。
0638nobodyさん2006/12/02(土) 10:06:43ID:???
なるほど、LOCK_NBでfalseの時は、別処理にするとかですか。
0639nobodyさん2006/12/02(土) 10:12:10ID:???
>>633
ない
0640nobodyさん2006/12/02(土) 10:12:35ID:???
本当に下らない質問なんですが、
WindowsのPHP4.4.2でfopenでURIを読み込もうとすると、apacheがエラーになります。
(WindowsXPで一般保護エラーのダイアログ?が出る。ご不便をおかけして申し訳ありません。のやつ)
何かモジュールを組み込む必要がありますか?
0641nobodyさん2006/12/02(土) 10:25:15ID:???
前に特定のバージョンのApacheでそんなバグが出てた報告見たよ。
Apacheをアップデートしてみたら?
0642nobodyさん2006/12/02(土) 10:56:39ID:h5X/zZpV
640です。追記です。php.iniは、
allow_url_fopen = On
になってます。
0643nobodyさん2006/12/02(土) 10:57:19ID:h5X/zZpV
>>641
ありがとうございます。試してみます!
06446142006/12/02(土) 11:31:04ID:???
>>623
だいぶレスが遅れてすみません。。$conの問題ではないです。
function内ではなくrequireで読み込むと表示されますし、
function内でもwhileの箇所を$row=mysql_fetch_array($rst);
にすると1行出力されます。

だからfunction内でwhileを使えないのか?もしくは何か設定があるのか?
っと思い、質問した次第です。リファレンスとか見まくったのですが、解決しません。。
0645nobodyさん2006/12/02(土) 11:38:22ID:???
print_r($row);してみそ
0646nobodyさん2006/12/02(土) 11:40:20ID:???
>>644
そんなん無い。whileくらい使えて当たり前。
>>623はconnectに問題とか行ってるがqueryの可能性も高い。
まずはconnectとselect_dbとqueryのそれぞれ直後に print mysql_error(); を入れること。
そもそもconnectとselect_dbとqueryとで戻り値チェックもしてない時点で君は大バカ。

ちなみに予想は「select_dbに失敗していてその後のqueryが実行できてない」だ。
1行だけ成功したパターンってその関数の実行前にすでにconnectとselect_dbを実行してて
改めて実行しなくても動く状況にすでになってたんではないかな。
(connectは同じパラメータで再connectかけると前のconnectをそのまま使う)

当ったら10回お礼を言うように!
0647nobodyさん2006/12/02(土) 11:41:55ID:???
>>645
どうしてそういう遠回りで無意味なデバッグ方法を示唆すんの?
それともお前は普段そんな変なデバッグ方法をとってるのか?
06486292006/12/02(土) 11:42:19ID:???
>>630

そのやり方の場合、
orderの値を全て把握していないと厳しくないでしょうか?
例えば、
a(order=100)
b(order=50)
c(order=3)
と並んでいて、
cを上に上げるためにはbのorder値と、
bをaの上に上げるためにはaのorder値と比較しなければいけないですよね?

MySQLでorderの直近の上の値をチェックできれば楽かと思いますが、
phpで実現しようと思うとかなり面倒なコーディングになるような気がするのですが・・。
0649nobodyさん2006/12/02(土) 11:47:05ID:???
>>648
なんでorderの値を連番にしないの?
0650nobodyさん2006/12/02(土) 11:47:18ID:???
>>639
ないですか。
整数演算はぜんぶFPU命令なんですね・・。
0651nobodyさん2006/12/02(土) 11:50:08ID:???
>>650
いや、PHPは演算データにfloat型を混ぜない限りはintで全部計算するよ。
06526142006/12/02(土) 11:52:35ID:???
>>646
おっしゃる通りでした・・。
この掲示板ではわかりやすいように>>614と書いたのですが、
実際は$con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD)と
変数にしていました。

これを変数ではないサーバの設定に変えたところ、問題なく表示されました。

デバッグの方法も頭から抜けていました。大変勉強になりました。
昨日からご迷惑おかけしました。ありがとうございました。
0653nobodyさん2006/12/02(土) 11:55:32ID:???
>>651
おお、混ぜなければいいんですね。
ありがとうございました。
0654nobodyさん2006/12/02(土) 12:22:46ID:h5X/zZpV
>>641
apacheを2.0.59にアップデートしてみましたが、やっぱりエラーが表示されました。
2.2系にアップデートしないといけないかもしれませんね?
0655nobodyさん2006/12/02(土) 13:35:25ID:???
>>654
ごめん。過去ログ確認したら間違ってた。
それ、Apache側じゃなくWin版PHP4.4.2のバグ。4.4.3以降で修正済み。
0656nobodyさん2006/12/02(土) 14:03:50ID:???
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
0657nobodyさん2006/12/02(土) 14:14:39ID:???
>>648
select order from table where order > 3 order by order limit 1で
一発で直近のorderの値くらい取得できると思うんですが。
0658nobodyさん2006/12/02(土) 17:01:10ID:uxBQAy5h
テーブルに検索をかけたときに
以下のようにして、見つかったら true なければ falese で条件判断をして
処理を行うということをしたいのですが・・・

$query=mysql_query($db_open,"SELECT * FROM abcd WHERE A='table'");
if($query==true){     
}
または、
if($query==falese){
}
これって正しいのでしょうか?違っていましたら、正しい記述の
仕方を教えていただけませんか?
0659nobodyさん2006/12/02(土) 17:03:23ID:???
そろそろPDO使おうぜ
0660nobodyさん2006/12/02(土) 17:04:20ID:???
>・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
0661nobodyさん2006/12/02(土) 17:19:31ID:???
>>648
MySQLのバージョン次第では副問合せでいけそうだが。
06626582006/12/02(土) 17:38:00ID:2AsRSHi/
>>659
ご回答ありがとうございます。
マニュアルを見たのですが、先ほどの例の場合、どう記述するかが
掴めません。よろしければ、お教え願えないでしょうか?
0663nobodyさん2006/12/02(土) 17:56:03ID:???
mysql_num_rows
0664nobodyさん2006/12/02(土) 18:01:33ID:???
>>624
クエリーだけで+1できるよ。
UPDATE テーブル名 SET `hoge`=`hoge`+1 WHERE 〜

っていうか、使い方にもよるけど、
MySQLのオートインクリメントを使えばいいと思うが。
0665nobodyさん2006/12/02(土) 18:15:12ID:???
>>664
オートインクリメントで+1できるのはinsertであって
updateしたい要望とは全然噛み合ってない気がするが。
つーか>>627
0666nobodyさん2006/12/02(土) 18:16:43ID:???
>>658
正しくない。mysql_queryの戻り値はSQL実行でエラーが出たかどうかであって
データが見つかったかどうかではない。
データの有無は取得されたデータを見ないとダメ。
0667nobodyさん2006/12/02(土) 18:22:19ID:???
>658
正しいかどうかは動かしてみればわかるだろ。
0668nobodyさん2006/12/02(土) 18:32:10ID:???
マニュアルを全く見ていない奴に手取り足取り教えてくれるスレなんですね
0669nobodyさん2006/12/02(土) 18:33:53ID:???
まぁ、くだ質なんてそんなもんだ
0670nobodyさん2006/12/02(土) 18:38:22ID:???
>>668みたいなのは見ない方が良い隔離スレだよ
0671nobodyさん2006/12/02(土) 18:47:09ID:???
教えたいだけの人こそこういうスレに入り浸らないほうがいい
マニュアルを見ないなら見ることを教えるほうがずっといい
ごく単純なことだと思うが
0672nobodyさん2006/12/02(土) 18:49:28ID:???
うるさいなー
0673nobodyさん2006/12/02(土) 18:58:02ID:???
バカの将来なんて俺の知ったことか。
0674nobodyさん2006/12/02(土) 19:00:22ID:???
教えてクンは量産するけどマニュアルの読み方は教えない、か
お前のほうがよっぽど馬鹿と言われるに相応しいねえ
0675nobodyさん2006/12/02(土) 19:03:48ID:???
よっしゃ、とりあえずジュリーの時の過ぎゆくままにを聴こうぜ
0676nobodyさん2006/12/02(土) 19:07:48ID:???
バカが自己満足するために作ったスレで説教うざいんだよ。
0677nobodyさん2006/12/02(土) 19:08:30ID:???
勝手な脳内定義を持ち出されても
それで納得できるのは馬鹿であるお前だけだよ
常識ないなあ
0678nobodyさん2006/12/02(土) 19:10:14ID:???
だってこのスレ立てたの俺だもの
0679nobodyさん2006/12/02(土) 19:12:12ID:???
>>673
>>676
お前ら何でこのスレにいるの?
0680nobodyさん2006/12/02(土) 19:12:58ID:???
>>678
誰だよお前
■ このスレッドは過去ログ倉庫に格納されています