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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん04/06/14 14:36ID:???
・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


抜けているものがあったら補足願います
0267nobodyさん04/06/21 13:33ID:???
>>265
やっとgd入りました、ほんとありがとうございます
0268nobodyさん04/06/21 13:34ID:???
>>216
文字フォーマットが分からんつーからパディング指定子などの
説明があるページを貼った。
0269nobodyさん04/06/21 16:30ID:???
>>247=249
libmysqlclient.so.12 をPHPがロードしようとして、
見付からなくて止まってるんだな。
find /usr -name libmysqlclient.so.12 で探して、
見つけたディレクトリを /etc/ld.so.conf に書き加えて、
ldconfig しとけ。
0270sage04/06/21 17:23ID:???
基本な事で申し訳ないですが質問を..

umask(0);
if(mkdir("/hoge/hoge", 0707)) {
 ...
} else {

 ...
}

これで同名のディレクトリが存在した場合に

Warning: mkdir(/hoge/hoge): File exists in /***/result.php on line --

と、警告がでてしまいます(処理は流れきっているぽい)

できればこの警告を表示させたくないのですが
なにか対処方法はありますでしょうか

0271sage04/06/21 17:24ID:???
基本な事で申し訳ないですが質問を..

umask(0);
if(mkdir("/hoge/hoge", 0707)) {
 ...
} else {

 ...
}

これで同名のディレクトリが存在した場合に

Warning: mkdir(/hoge/hoge): File exists in /***/result.php on line --

と、警告がでてしまいます(処理は流れきっているぽい)

できればこの警告を表示させたくないのですが
なにか対処方法はありますでしょうか

0272nobodyさん04/06/21 17:52ID:???
>>271
umask(0);
if(!file_exists("/hoge/hoge") && mkdir("/hoge/hoge", 0707)) {
 ...
} else {
 ...
}
でどぅ?

単にエラー表示したくないのなら
error_reporting(0);
0273nobodyさん04/06/21 18:43ID:???
エラー制御演算子でいいんじゃね?
0274nobodyさん04/06/21 18:46ID:???
>>271
そのエラーの発生要因が判っていて、かつ、
そのエラー発生を防ぐ為だけにとまどろっこしくなる(複雑になる)
のなら、エラー制御演算子
ttp://jp.php.net/manual/ja/language.operators.errorcontrol.php
を使うといいかも。

臭いものには蓋的な解決法なんで、>>272の方がいいけど
0275nobodyさん04/06/22 10:25ID:???
漠然とした質問で申し訳ないのですが、phpMyAdminのSQLからは実行出来るのに
PHPからmysql_queryするとエラーが出る場合、SETする文字に問題があるとは
想うのですが、どんな文字が原因となっていると考えられるしょうか?
mysql_query($query)の部分をecho $queryで出力してC&PでphpMyAdmin
のSQLで実行すると成功します。文字コードも関係しているのでしょうか?。
0276nobodyさん04/06/22 10:37ID:???
>>275
query投げる前が間違ってんだろ
connectしっぱいしてんじゃねーのか?
027727504/06/22 10:53ID:???
mysql_affected_rows() || mysql_query($query) || die('err');
と書いていたせいでした。お騒がせしましたm(_)m。

>>276
アドバイスありがとう^^
0278nobodyさん04/06/22 16:04ID:5HQSlaav
データベースから取得してきた値(配列)を全ユーザ、全ページで共有して使いたいんですが、
セッション以外に格納できる良い場所はないでしょうか?(毎回ページアクセスするたびにDBにアクセスされたくないため)

0279nobodyさん04/06/22 16:07ID:???
どうぞ -> rwxrwxrwx buff.dat 0byte
0280nobodyさん04/06/22 16:47ID:uF7//6+H
自分のアドレスを取得する方法を教えてください
0281nobodyさん04/06/22 16:52ID:???
>>280
名前欄にfusianasan
0282nobodyさん04/06/22 16:56ID:???
ttp://jp.php.net/manual/ja/reserved.variables.php
0283nobodyさん04/06/22 17:13ID:???
>>280
役所に行って住民票をとってこい。

それか、もちっと「アドレス」を正確に説明して味噌。あと「自分」も。
0284nobodyさん04/06/22 18:39ID:???
察してやれよ
0285nobodyさん04/06/22 19:41ID:???
じゃあifconfigでいいか
0286nobodyさん04/06/22 20:37ID:???
>>280
CS:EIPとか?
0287nobodyさん04/06/23 08:56ID:???
1.自分のグローバルIPが知りたいなら
診断君へ逝く
もしくはLAN外で、<?=$_SERVER['REMOTE_ADDR']?>
または、>>281

2.プライベートIPが知りたいなら
LAN内で<?=$_SERVER['REMOTE_ADDR']?>
もしくは、Windowsだったら、ipconfig
Linuxだったら、>>285

3.メアドが知りたいなら
ISPに聞く。

4.住所が知りたいなら
>>283

たぶん…3かな。
0288nobodyさん04/06/23 09:04ID:???
>>239
出力バッファに貯めておいて横取りしてファイルに出力する。
<?php
ob_start();
?>
(ここでいろんな出力)
<?php
$file = fopen('ファイル名','w');
fputs($file, ob_get_clean());
fclose($file);
?>
0289nobodyさん04/06/23 12:22ID:gFRZUYHb
Perlでの $ENV{'HTTP_REFERER'}
は、PHPではどうやるのでしょうか?教えてください、お願いします
0290nobodyさん04/06/23 12:23ID:gFRZUYHb
環境は
PHP5.0β4
Apache2.0.48
です。
0291nobodyさん04/06/23 12:30ID:???
質問です。
csvファイルのアップロードをするのに、fgetcsv関数をつかってるんですが
excel2000で"," をという値で保存したcsvファイルをアップロードすると,"と読み込まれます。
これは仕様でしょうか?
PHP Version 4.3.6を使っています。
よろしくお願いします。
0292うんこ04/06/23 12:40ID:???
>>289
http://jp.php.net/reserved.variables
0293うんこ04/06/23 12:42ID:???
>>291
excel2000で保存したcsvファイルをテキストエディタで見れば
問題は解決すると思います
0294290,29104/06/23 12:46ID:???
>>292
ありがとうございます
0295nobodyさん04/06/23 12:53ID:???
>>293
すいません。
エディタで見たのですが、わかりませんでした。

こちらのほうで正常に読み込まれたのでこちらをつかう事にします。
http://pukiwiki.org/index.php?%E8%87%AA%E4%BD%9C%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%2Fcsv2newpage.inc.php
0296nobodyさん04/06/23 14:01ID:???
$a に入っているのが 数字かそうでないか を判定したいんだけどどうすれば
0297nobodyさん04/06/23 14:20ID:qX+B9Isg
>>296
is_numeric($str)
0298nobodyさん04/06/23 14:32ID:???
>>297
is_numericは正確に言うと数値かどうかの判断だがなぁ。
0299nobodyさん04/06/23 14:41ID:???
>>298
うんにゃ。数値または数値文字列であるかの判断。
マヌアル嫁
0300nobodyさん04/06/23 14:59ID:???
>>297
(゚∀゚)サンクスコ
0301nobodyさん04/06/23 15:06ID:???
<INPUT NAME="unko" VALUE="<?= urldecode($_GET['unko']) ?>">

これで文字列に \ を入力すると どんどん増えていきます (バイバイン級)
どうしたらいいでしょうか
送信前にJavaScriptでurlencodeしなきゃだめ?
0302nobodyさん04/06/23 15:17ID:???
>>301
<INPUT NAME="unko" VALUE="<?= stripslashes($_GET['unko']) ?>">
0303nobodyさん04/06/23 15:31ID:???
>>296
ctype_digit($a)
0304nobodyさん04/06/23 15:32ID:???
>>301
バイバインなつかしいね
0305nobodyさん04/06/23 15:39ID:???
栗まんじゅう
0306nobodyさん04/06/23 15:44ID:???
function bybyne ($kurimanju) {
$kurimanju = $kurimanju * 2;
return $kurimanju;
}
030730104/06/23 15:55ID:???
>>302
ありがとう
でも新たな問題が!

" を入力できないっす
まあこれはあきらめようかな
無理っぽいし
0308nobodyさん04/06/23 15:59ID:???
>>307
お前、脳味噌あるか?
ちっとは自分で頭使って考えろや
030930104/06/23 16:11ID:???
>>308
まあそうなんだけどさ
VALUE="<?= urlencode(stripslashes($_GET['unko'])) ?>"
ってやってもだめだったし
preg_replace("/\"/","\\\"",$dpreg) でもだめだった
そもそも"\""という表記がだめっぽだし
シングルクオーテーションで囲えばいいんだけど
今度はそのシングルクオーテーションが入力できなくなるし
もうおっぱいおっぱいなんですよ
031030104/06/23 16:12ID:???
>>309の $dpreg は stripslashes($_GET['unko']) と思ってくだちい
0311nobodyさん04/06/23 16:15ID:jqDhu+uC
>>309
VALUE="<?= urlencode(htmlspecialchars(stripslashes($_GET['unko']))) ?>"
031230104/06/23 16:27ID:???
>>311
サンクスコ
urlencodeはいらなかったっす
0313nobodyさん04/06/23 20:26ID:15bnd+/J
Yahoo!オークションなど文字コードがEUCの検索エンジンを
$key=mb_convert_encoding($_POST["keyword"], "EUC-JP","auto");
で文字コードを変換すると、変換したくない他の検索エンジンもEUCに変換されてしまうのですが、
変換されないようにするにはどうすればよろしいのでしょうか。
<?php
$Key=urlencode($_POST['keyword']);
$key=mb_convert_encoding($_POST["keyword"], "EUC-JP","auto");
switch($_POST['engine']) {
case "kakaku": $url="http://www.kakaku.com/txtsearch/txtsearch.asp?SearchWord=";
break;
case "yahooauction": $url="http://search.auctions.yahoo.co.jp/jp/search/auc?auccat=0&alocale=0jp&acc=jp&p=";
break;
}
header("Location: ".$url.$Key);
?>
0314nobodyさん04/06/23 20:34ID:???
>>313
変換したくない時は変換しないようにスクリプトを書けばよいよい
0315nobodyさん04/06/23 20:38ID:???
>>313
方法は色々あるけど、件のソースのようにswitchで
切り替えてるなら、caseの中でそれぞれのサイトに合わせて
$key←$_POST["keyword"]の処理をしたらいいでそ。

最も、各サイトのurlとか変換処理の有無なんかは
配列かなんかで前の方で設定を集約するのがスマートやね。
0316nobodyさん04/06/23 20:42ID:15bnd+/J
>>314さん
>>315さん

教えてくれてどうもありがとうございます。
0317nobodyさん04/06/24 11:14ID:Ig3nklaT
経験豊かな皆さんに質問です。
昔のPHPはGETやPOSTなど区別する必要が無いと効いています。
例えば、
$_POST["giko"] : 10
$_GET["giko"] : 20
$_COOKIE["giko"] : 30
$_SESSION["giko"] : 40
のような場合のときに、
echo $giki
とすると何が表示されるのですか?
0318nobodyさん04/06/24 11:40ID:???
そんなコーディングはしちゃダメが正解。
0319nobodyさん04/06/24 11:43ID:???
区別する必要が無くても区別しなきゃ不味いだろう
>>317はやった事無いからシラネ
0320nobodyさん04/06/24 11:44ID:???
>>317
$gikiは定義されてないから何も出ない
0321nobodyさん04/06/24 12:00ID:???
>>320
だな
0322nobodyさん04/06/24 12:36ID:???
320に補足すると、「register_globals = On」な環境だと
variables_orderで指定した優先度の高い(右側)ものが入る。
通常の$_SERVER[]と同じ。

ああ、PHPの設定で変わるもんだから、仮にPOSTが無かった
時にはGETでという処理を書くときも、システムの動作に
依存させないで、ちゃんとコーディング上で処理しないと駄目。
# register_globalsはコードの中でini_setできないし
0323nobodyさん04/06/24 13:35ID:???
register_globals = Onの時に使ってたスクリプトを
register_globals = Offで使おうとしてこうやった事あるw

$key = array_keys($_REQUEST);
$i = 0;
while(isset($_REQUEST[$key[$i]])){
${$key[$i]} = $_REQUEST[$key[$i++]];
}
0324nobodyさん04/06/24 13:46ID:???
それはextractを知らなかったってところに笑えばいいんだよね?
0325nobodyさん04/06/24 13:49ID:???
てか、import_request_variables
0326nobodyさん04/06/24 16:35ID:???
セキュリティのことを考えると書き直したほうがいいんじゃないかな、と苦笑すればいいんだよね?
032731704/06/24 17:36ID:???
ありがとうございました。
自分ではそのようなかき方はしないのですが、
頂いたソースがそのように書いたものでしたので。
0328nobodyさん04/06/24 20:43ID:???
ある関数の使い方を確認するためにPHPのマニュアル見てたら
@function_name で呼出してる例があって
探したんだけど@についての説明を見つけることができませんでした
@つけるとどうなるんですか?
0329nobodyさん04/06/24 21:54ID:???
メールが出せます
0330nobodyさん04/06/24 22:26ID:WjPQG3mJ
おまいら、申し訳ないですがよろしくお願いします。

phpのソースをプレーンテキストとして表示させるにはどうしたらよいでしょうか?
apacheの設定なのか拡張子をtxtに変えただけでは、プレーンテキストとして表示してくれません。

よろしくお願いします。
0331nobodyさん04/06/24 22:45ID:???
>>330
Apacheの設定次第
よくあるのは.phpsとか
0332nobodyさん04/06/24 22:46ID:???
>>330
IEのtext/plainをHTMLとして表示するステキ仕様ってオチは無しの方向でよろ。
0333nobodyさん04/06/24 23:03ID:???
せっかくshow_sourceてな関数があるのでそっちを使えば便利なのに。
parse errorが出た時に重宝してる。
0334nobodyさん04/06/24 23:05ID:WjPQG3mJ
>>333

ほーほー

どうもありがとう。調べてみます。
0335nobodyさん04/06/24 23:42ID:???
>>328
http://www.php.net/manual/ja/language.operators.errorcontrol.php
これだ。
0336nobodyさん04/06/25 00:13ID:QzuvB6xt
教えてください。
a.phpというスクリプトに
<?
readfile("http://hoge.com/hoge.php?a=1&b=2");
?>
と記述してスクリプトを動かすとError 0がでるのに
<?
header("Location: http://hoge.com/hoge.php?a=1&b=2");
?>
と書くとうまく動きます。どうしてでしょうか。
0337nobodyさん04/06/25 01:06ID:???
>>336
「@readfile()という名前でコールされない限り、 エラーメッセージが表示されます」
だそうです。
0338nobodyさん04/06/25 11:22ID:ydrfhQOC
初歩的な質問なんですが
ファイルに書き込むときはfwriteとfputsのどちらがいいのでしょうか。
教えてください。よろしくお願いします
0339nobodyさん04/06/25 11:28ID:???
>>338
http://www.php.net/fputs

意味わかるか。
0340nobodyさん04/06/25 11:28ID:???
>>338
マニュアル嫁
0341nobodyさん04/06/25 13:58ID:???
ちょっと便乗質問

echoとprintの決定的な違いってなんでしょうか

マニュアル読んだけどわかりませんでした
0342nobodyさん04/06/25 14:13ID:???
echo $a,$b
print $a,$b (だめ)
0343nobodyさん04/06/25 15:16ID:???
でも
print "$a$b"; はできるよ?
0344nobodyさん04/06/25 15:29ID:???
その話っていつも「男は黙ってecho」で終わっちゃうんだよね
0345nobodyさん04/06/25 15:44ID:???
>>343
それだと引数としては1個。print $a.$bと等価。

0346nobodyさん04/06/25 17:39ID:???
PHP4.2.2です
phpinfo() の出力結果を横取りしてファイルにでも落としたいんだけど
どうしたらいいかな
0347nobodyさん04/06/25 17:47ID:???
ttp://jp.php.net/manual/ja/ref.outcontrol.php
0348nobodyさん04/06/25 18:00ID:???
>>346
php -i > hoge.txt
0349nobodyさん04/06/25 18:02ID:???
echo "hoge" > /dev/null
0350nobodyさん04/06/25 18:10ID:???
>>346
http://jp.php.net/phpinfo
マニュアルを隅々と嫁。特に下の方
035134604/06/25 18:24ID:???
>>350
できた!
<? ob_start(); phpinfo(); fwrite( fopen("unko.html",'w'), ob_get_contents() ); ?>
0352nobodyさん04/06/25 18:28ID:76ADPduI
Perlでの正規表現ってPHPでも使えますか?
$sub =~ s/^Re://g;
$sub =~ s/\[\d+\]\s?//g;
$com =~ s/<br>/\r> /ig;

PHPで使えないんであればどう書き直せばいいのか教えてくださいm(_ _)m
0353nobodyさん04/06/25 18:30ID:???
$sub =~ s/^Re://g;
$sub =~ s/\[\d+\]\s?//g;
$com =~ s/<br>/\r&gt; /ig;
こうでした……
0354nobodyさん04/06/25 18:36ID:???
preg_matchとか
gはallだなぁ
0355nobodyさん04/06/25 18:48ID:???
>>353
こんなかんじでね?
gはデフォで、マッチさせる数を制限したいときだけpreg_replaceの第四引数で指定する。
$sub =preg_replace( '/^Re:/', '', $sub);
$sub = preg_replace('/\[\d+\]\s?/', '', $sub);
$com = preg_replace('/<br>/i', '\r&gt; ', $com);

つーかマニュアル嫁。
ttp://jp.php.net/manual/ja/ref.pcre.php
ttp://jp.php.net/manual/ja/function.preg-replace.php
035635204/06/25 19:08ID:???
355さんありがとうございます

マニュアル調べたりしたんですけど、Perlがよくわからなくてできませんでした_| ̄|○
0357nobodyさん04/06/25 19:18ID:???
はじめまして。
phpでhead.txtを取得してスレッド一覧を表示するプログラムを作っています。

head.txtの内容はご存知かと思いますが、「9999999999.dat<>スレタイ(数)」という感じになっています。
「9999999999.dat」と「スレタイ(数)」はsplitで分割できたのですが、そこから「スレタイ」と「数」を取得するにはどうすればいいのでしょうか?

今は、
「(」で分解して、配列の最後を取得し、「)」より前を取得して・・・→数
「(」より前を最後を除いて連結・・・→スレタイ
とやっているのですが、これだと処理に時間がかかりそうな気がしてしまいます。

正規表現などで簡単にやる方法はないのでしょうか?
どなたか教えてくださいm(__)m
035835704/06/25 19:19ID:???
sageてしまったorz
0359 ◆.jC7ANgFY. 04/06/25 19:35ID:???
>>357
preg_match('`^(\d+)\.dat<>(.*)\((\d+)\)$`', $line, $match);
こんな感じでは?
[1] スレッドID、[2] スレッドタイトル、[3] レス数
0360nobodyさん04/06/25 19:46ID:???
>>357
俺もそういうの作ったが、なぜsubject.txtを読みに行かない?
それで1行毎に<>でsplitして表示すればいいじゃん
0361nobodyさん04/06/25 19:46ID:???
>>357
ケツから最初の"("をサーチ。そこから")"まで、もしくはケツの1つ前の範囲がスレ数。
スレ名称は頭から、ケツから最初の"("の手前の範囲。そのままだと多分
スレ名称とスレ数の間にセパレータのスペースが入ってると思うけど。

しかし、subject.txtは鯖ごとに微妙に作りが違うというというワナ。
0362nobodyさん04/06/25 19:50ID:???
>>357
というか、それsubject.txtだろ
head.txtはそんなことかいてない
0363nobodyさん04/06/25 19:53ID:???
勘違いだと俺も思って、解釈した。
http://pc5.2ch.net/php/head.txt
http://pc5.2ch.net/php/subject.txt
0364nobodyさん04/06/25 20:14ID:???
>359
できました。
ありがとうございます!

>360、>362
subject.txtの間違いでした。
すいませんm(__)m
0365nobodyさん04/06/25 22:40ID:???
phpとjavascriptの連携をさせたいのですが、可能でしょうか。
具体的にはjavascriptにて取得した画像サイズなどの情報をphpへ
渡したいのです。
<img>タグを使う方法以外で何かありますか?
0366nobodyさん04/06/25 22:49ID:???
>>365
可能。javascriptでPOSTするデータを
作ってformで送ってやればよい。

><img>タグを使う方法以外で何かありますか?
?
0367nobodyさん04/06/25 22:57ID:???
どうもー。
POSTするってことは、
ページの遷移があるってことですか?
■ このスレッドは過去ログ倉庫に格納されています