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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2005/11/27(日) 00:07:12ID:eBvjdczp
PHP全般の質問スレです。
【基本ルール】
・新規質問の方は上げてください。age進行でお願いします。
・質問者は2回目以降、最初のレス番号を名前欄に入れてください。
・回答者は質問者に対して>>(アンカー)をつけてください。
・煽り・荒らしは放置。荒らしに反応した香具師も荒(ry
・解決しなくてもこたえてもらったら礼を。
【質問テンプレ】
・マニュアルを調べたか、google検索したか(調べたキーワード)
・タイトル(禁:教えてください!etc) 例:requireとinclude
・内容 例:requireとincludeはどう違うのですか?
・質問する際には環境も明記。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
【PHP マニュアル】
http://www.php.net/manual/ja/
※マニュアル上部の「search for」から検索を活用すべし(便利)。

過去スレ、関連リンク、FAQ等>>2-10辺り
0222nobodyさん2005/12/05(月) 17:33:48ID:???
「URLエンコード」って名称を知らないプログラマが多いようで、全く同じ質問が時々出るな
名称を知ってりゃ検索であっさり見つかるんだが・・・
FAQに加えないか?
0223nobodyさん2005/12/05(月) 17:58:56ID:zZ7taK0k
いいんじゃないの
本来はPHPと関係ないから他でやってほしいけどね
0224nobodyさん2005/12/05(月) 18:03:00ID:???
くだスレが適当です。ちびっこの諸君はくだスレで僕と握手!
0225nobodyさん2005/12/05(月) 18:22:55ID:???
俺は初めて見たけど。なんというかテンプレ文にし辛そうだな。
GETやPOSTで日本語を送信するには、とか?
0226nobodyさん2005/12/05(月) 20:28:59ID:???
??. "%xx%xx"形式に変換したい、URLに全角文字を含ませたい
 → urlencode()
でいいんじゃないの?
0227nobodyさん2005/12/05(月) 21:05:29ID:???
HTTPについての知識が無い
 →くだ質スレ
PHPのマニュアルを読んだことが無い
 →くだ質スレ
リア厨・リア高だ
 →くだ質スレ
ニートだ
 →くだ質スレ
0228nobodyさん2005/12/05(月) 21:06:39ID:???
>>227
 →くだ質スレ
0229nobodyさん2005/12/05(月) 21:58:13ID:???
>>227
HTTPがわからんのはWebprog初心者の質問が適当
0230nobodyさん2005/12/06(火) 14:32:19ID:???
>>229
ただ、初心者はどこで質問するのが適当かわからない。
0231nobodyさん2005/12/06(火) 15:22:41ID:???
排他制御で、ディレクトリをフラグとしてロックをかけようと思うのですが
15ページほどのサイトで全てのページに
同じディレクトリをフラグとしてロックをかけたら、
アクセスが増えるとすぐに破綻しますか?

どのページでも同じファイルにアクセスしているので
こういう事をしなければならなくなってしまったのですが。
0232nobodyさん2005/12/06(火) 16:22:55ID:???
>231
>1-5
>1-5
>1-5
>1-5
>1-5
>1-5
0233nobodyさん2005/12/06(火) 16:34:20ID:???
>>231
ディレクトリのはおすすめできない
0234nobodyさん2005/12/06(火) 16:58:36ID:???
>231
そうそう破綻しない。
いまのマシンはスペックが昔と段違いなので大丈夫。
心配しすぎです。
0235nobodyさん2005/12/06(火) 17:02:03ID:???
>>233
flockよりよくねーか?
0236nobodyさん2005/12/06(火) 17:02:41ID:???
どうしても心配なら rename を使った排他制御の手法の方が速いのでそちらを使うのがよい
0237nobodyさん2005/12/06(火) 17:20:18ID:???
ケントのスクリプトを改造マジオススメ!
0238nobodyさん2005/12/06(火) 18:28:29ID:???
すいません、質問です。

$numには数字が入ってるとして

$function = "f_$num";
$function($arg);

を1行で実行する事ってできませんか?
$functionの引数はいくつとるかわからないと仮定してます。
0239nobodyさん2005/12/06(火) 18:29:11ID:???
ちなみに

"f_$num"($arg);

はいけそうな気もしましたがパーサーエラーになりました。
0240nobodyさん2005/12/06(火) 18:39:46ID:???
参照返さなくていいなら出来るよ
0241nobodyさん2005/12/06(火) 18:40:38ID:???
教えてください
02422332005/12/06(火) 19:02:24ID:???
>>236
私も rename 推奨者です。
0243nobodyさん2005/12/06(火) 19:22:36ID:???
>>239
evalじゃなくて?
0244nobodyさん2005/12/06(火) 19:32:33ID:???
http://php.net/manual/ja/ref.funchand.php
0245nobodyさん2005/12/07(水) 00:55:03ID:???
プログラム中で終了しそうな場面って、
returnとexit()以外に何かありますか?
0246nobodyさん2005/12/07(水) 01:05:31ID:???
Fatal Errorを出すようなものも終了しちゃうね。requireとか。
質問の意図がよく分かんないけど、
想定していない場所で終了しちゃってその場所を特定したいしたいってことなら、
エラー処理や関数の返り値をチェックをきちんとしたり、デバッガーを通すとかしたほうがよいかと。
0247nobodyさん2005/12/07(水) 01:13:43ID:???
die
0248nobodyさん2005/12/07(水) 01:14:27ID:sd3DaoFD
`halt -p`
0249nobodyさん2005/12/07(水) 01:35:55ID:???
phpファイルのHTML記述部分に<? ... ?> と書きたい場合
どうすればいいんでしょうか。
0250nobodyさん2005/12/07(水) 01:37:33ID:???
>>249
xml宣言なら
<? echo "<?xml version=\"1.0\" encoding=\"Shift_JIS\"?>" ?>
とか
0251nobodyさん2005/12/07(水) 01:44:25ID:???
PI風のショートオープンタグをオフって、jaspタグを使うとか
0252nobodyさん2005/12/07(水) 02:32:31ID:pljJCe1f
>>249
実体参照
0253nobodyさん2005/12/07(水) 03:03:18ID:???
>>252
表示されちゃうじゃん
0254nobodyさん2005/12/07(水) 03:08:57ID:???
session_start ( );
if ($_SESSION['name'] == '') {
$_SESSION['name'] = 'hoge';
} else {
echo $_SESSION['name'];
}

のようなコードを書いて実行したところ、
PCからは上手くセッションが実行できましたが、
携帯からは実行できませんでした。
何がいけないんでしょうか。
0255nobodyさん2005/12/07(水) 03:09:27ID:???
ググれ
0256nobodyさん2005/12/07(水) 03:13:17ID:???
マニュアルのセッションのページ見ろよおおお
0257nobodyさん2005/12/07(水) 03:16:11ID:???
>>254
PHPのセッションの実装には、cookieとURL書き換えの2つがある。
0258nobodyさん2005/12/07(水) 03:28:12ID:???
http://www.php.net/manual/ja/ref.session.php

セッションの説明のどこにありますか?
長すぎるのでヒントだけでも教えてください
0259nobodyさん2005/12/07(水) 03:46:25ID:???
知っておく必要があることばかりだから、全部読んで理解しましょう。
02602542005/12/07(水) 05:25:40ID:???
読んできました。
クッキーを使う方法とURLを使う方法があると書いてありました。
URLを使う方法はセッションIDをURLに埋め込んで渡すと書いてありました。

たぶん254のコードは、携帯がクッキーを扱えないことが
原因となっていたのだと考えました。


が、違うサーバで上のコードを実行したら
見事意図したとおりに動きました。
もちろんURLに埋め込みなんてしていません。

これはどういうことでしょうか。
0261nobodyさん2005/12/07(水) 05:56:48ID:???
>>260
session.use_trans_sid じゃないの?

0262nobodyさん2005/12/07(水) 06:05:53ID:???
session.use_trans_sid あたりかねぇ。
02632622005/12/07(水) 06:11:42ID:???
あー。>>261さま、おはようございます。。。
こんな時間に起きてるヤツいないべ、と思ってリロードしなかったワタクシめを土ブタと泥ガメと罵りくださいませ・・・
0264nobodyさん2005/12/07(水) 06:23:43ID:???
>>262
土ブタ、泥ガメ、ぬるぽ
0265nobodyさん2005/12/07(水) 07:14:30ID:???
>>260
自分でURL埋め込まなくてもPHPが勝手につけてくれる設定になっているサーバ
0266nobodyさん2005/12/07(水) 11:09:11ID:???
txtファイルの上から5行をページ1で読み込みページ2で続きの6〜7をみたいな感じで読み込んで行くにはどうゆう記述をすればできるのでしょうか?
0267nobodyさん2005/12/07(水) 11:22:30ID:???
>>266
むしろ書き出す時にページ分けする。
0268nobodyさん2005/12/07(水) 11:37:22ID:???
>>266
ex) hoge.php?page=2
$path = "hoge.txt";
$count = 5; // $_GET['count']
$offset = ($_GET['page'] - 1) * $count;
foreach (array_slice(file($path), $offset, $count) as $line)
 echo $line;
0269nobodyさん2005/12/07(水) 12:32:01ID:???
ちょっと私用で試すことができないので金曜日に試してみるので試したら報告しにきます。
ありがとうございました。
0270nobodyさん2005/12/07(水) 12:37:29ID:???
>>269
ちなみに、268はそのままじゃうごかんぞ。
ま、みりゃ分かるだろうけど。
0271nobodyさん2005/12/07(水) 13:25:57ID:???
>>270
どゆこと?
0272nobodyさん2005/12/07(水) 13:28:18ID:???
まずPHPでラーメン作れるようになってみろ
話はそれからだ
0273nobodyさん2005/12/07(水) 13:33:12ID:???
そんな感じのスレあったけどすげー糞スレだったじゃん
0274nobodyさん2005/12/07(水) 13:42:04ID:???
質問です。
携帯用サイトで動画ファイルのダウンロード数を計上したいのですが、
どのタイミングで変数をインクリメントしたらよいのか分かりません。
現状では単に動画ファイルへのリンクを張っていて、ダウンロードはできるのですが
「ユーザがそのリンクを押したかどうか」を捕捉してなんらかの処理をさせるということができていません。
携帯用のサイトなのでjavascriptは使えません。
ファイルがダウンロードされたかどうか知るための方法といったものは用意されていないのでしょうか。

よろしくお願いします。
0275nobodyさん2005/12/07(水) 13:47:36ID:???
>>274
簡単な話がPHPでファイルの中身を出力したらいい。

download.php
<?php
 // ここらへんでカウント
 header("Content-type: 〜");
 readfile($_GET["filename"]; // すげーテキトーだけどまあ雰囲気だけ
?>

で動画へのリンクはdownload.php?filename=hoge.mpgみたいな感じ。
0276nobodyさん2005/12/07(水) 14:31:04ID:???
>>274-275
auだと分割ダウンロードしようとするから、
rangeとかの処理を書いてやるか、
PEAR Downloadを使わないとだめよ。
0277nobodyさん2005/12/07(水) 16:06:56ID:Umsh9cPc
phpでアカウント発行させる方法で悩んでいます。

海外だと、ユーザ認証させてから閲覧・投稿等の権限レベル毎にページを生成するフォーラムサイトとか多いですよね。

ユーザにアカウントを申請させ〜仮発行メール送信〜そのメールに記載したURLをクリックして本登録〜認証〜投稿、
みたいにしてるのってよくあると思うのですが、あれと同程度のセキュリティを備えた物をSendmailが使えないレンタルサーバで実現させるには、どうやったらいいでしょうか。

既に作成されている掲示板に本機能を盛り込みたい為、phpBB等の改造以外の方法を探しています。

・phpのライブラリか何かでSendmail的にデータを送る事ができるものってありまでしょうか?(おそらく扱えるプロトコルが違う為普通はできないと思うのですが。)
・メールのやりとり以外で同程度のセキュリティを持つアカウント発行をする仕組みで、オーソドックスな方法というのはあるのでしょうか。
・仮発行メールの様な物は、何かハッシュ値を計算した物をユーザ側に送付していたと思うのですが、あの仕組みが分かる様なサンプルスクリプトや解説サイトなどありますでしょうか。

定番物をご存じの方、こうすればいいよ的なアイデアをお持ちの方、是非お教え頂ければと思います。よろしくお願いします。
0278nobodyさん2005/12/07(水) 16:16:36ID:???
>>277
仮発行メールはメールアドレスの正当性を確認するために行うのでメールアドレス登録しないなら必要ない。
ハッシュはuniqid()でも使えばいいんじゃない。
0279nobodyさん2005/12/07(水) 16:43:41ID:???
レスありがとうございます。

一人の人が何個もアカウントを取れない様、メールアカウント(無料メルアカは弾き)で登録させるのが良いのかなと思っていまして、
また、仮メールを送る方法であれば、なりすましを防げる為、できればメールやりとりで自動登録させたいと思います。
0280nobodyさん2005/12/07(水) 16:52:01ID:???
>>271
どゆことって?
268はそのまま動かないって言葉通りだが。
0281nobodyさん2005/12/07(水) 17:28:25ID:OA204cci
Win環境でphpからメールを送るとfromが
sendmail_from
で指定した値になってしまいますが、これを
自由に変更する方法ってないでしょうか?
0282nobodyさん2005/12/07(水) 17:33:33ID:???
>>277
sendmailが何をするもの(ソフト)か
もちっと基本的な事を勉強汁。
自分のやりたいことと方法は明確なようだから
こつこつとやれば大丈夫。

1.メールを送るだけならSMTPが話せりゃいいので
SMTPがどういうものかは理解したうえで、
pearのとかphpmailerとか好きなライブラリを使えば?
勉強用に作っても良いけど。

2.ない。

3.特に難しいものではない。
ユニーク性があって、他人に容易に類推できるものでなければ良い値なだけ。
連番や時間、発行先メールアドレス等はユニーク性はあるが、
容易に類推可能なので、それらを元に組み合わせたもののハッシュを取ってる。
0283nobodyさん2005/12/07(水) 17:36:05ID:???
>>281
釣りか?自由にsendmail_fromを変更すればいい。

ini_set('sendmail_from', 'hoge@example.com');
mb_send_mail(...
0284nobodyさん2005/12/07(水) 17:36:15ID:???
phpだけで、画像掲示板等で全く同じ画像のアップロードを防ぐ事は出来ますか?
あったらその方法を教えてください。
0285nobodyさん2005/12/07(水) 17:39:59ID:???
>>284
テキストの時と同じように、バイナリで比較すればいいじゃん。
0286nobodyさん2005/12/07(水) 17:41:54ID:???
どうやるのが効率的かわからんけど、アップロードされた画像はDBにバイナリで
入れておいて、新しく画像がアップロードされたらfread()で読んでDB内を検索、とか?
ファイルで持っておくと既存の画像のバイナリ全部読んでくのが大変そうな気がするんだけど、
どういう方法が一番効率的なんだろな?
0287nobodyさん2005/12/07(水) 17:50:37ID:???
>>285
その次には、それの実用性を上げるために
バイナリ→ハッシュ生成&保存→ハッシュ比較
とワンクッションいれるかね。
0288nobodyさん2005/12/07(水) 17:52:28ID:???
ま、普通はハッシュ生成だろうな。ファイル比較なんてやってたら偉いことになる。
ハッシュが面倒だったらファイルサイズでもそこそこ弾けると思われ。
02892772005/12/07(水) 17:53:49ID:???
レスサンクス!調べてみます。ありがとう。
3.は良いサンプルあると良いんですけどね。自分でやるとなると結構たいへんです。
ハッシュ値は可逆性ないものじゃないと危ないですよね。という事は、演算したハッシュ値は2〜3日限定で覚えておけばいいのかな。がんばってみるか…。
0290nobodyさん2005/12/07(水) 17:54:44ID:???
>>283
ありがとうございました<m(_)m>
0291nobodyさん2005/12/07(水) 17:56:57ID:???
>>284
md5_file( "filename")
02922812005/12/07(水) 17:58:57ID:???
すいません、もう一つ。

sendmail_from

hoge@hige.hage
とか設定してみても
@の前の部分しかfromに記載されません。
後ろの部分は出ないものなんでしょうか?
0293nobodyさん2005/12/07(水) 17:59:46ID:???
>>285-288
なるほど、わかりました。色々試してみます。ありがとうございました。
0294nobodyさん2005/12/07(水) 18:02:14ID:???
>>291
なるほど、それもいいですね。簡単そうでよさそうですね。
02952912005/12/07(水) 18:17:02ID:???
>>294
いや、それもじゃなくて>>287-288がいってることができる関数がPHPにはあると言いたかったのだが。
0296nobodyさん2005/12/07(水) 19:29:33ID:???
PHP で作られた Web メーラで、
日本語のファイルを添付して送信しても
化けないイケてる奴はどれ?
0297nobodyさん2005/12/07(水) 20:59:35ID:???
レッツPHP!さんのHTTPGET2なのですが、
そのままコピペしてアップロードしても
ソース表示など出来ません。

過去ログには

[511 のレス1] Name:いきのむし Date:2005/01/08(Sat) 16:47

もしHTTP GET2号のソースをコピーしてそのまま使ってらっしゃるなら、ほぼ100%動かないでしょう。そういうプログラムになってますので。
29行目 if(!$site || !strstr($HTTP_HOST,"php.s3.to") || !ereg("^http://";,$site)){

と、ありました。しかしよくわかりません。
どうすればソースなど表示出来るでしょうか?
宜しくお願いします。
0298nobodyさん2005/12/07(水) 21:05:41ID:???
>>297
スレ違い
【 スクリプト改造依頼スレ 】(丸投げ) part4
http://pc8.2ch.net/test/read.cgi/php/1127916965/
02992972005/12/07(水) 21:12:13ID:???
>>298
ごめんなさい。
0300nobodyさん2005/12/07(水) 21:23:05ID:???
phpでメールを送信するときのアドレス(Fromの部分)を
自分で設定したいのですが、どうすればいいのでしょうか。
0301nobodyさん2005/12/07(水) 21:30:18ID:???
ここまでどうでもよし
0302nobodyさん2005/12/07(水) 21:31:42ID:???
こっからもどうでもいいや
03032972005/12/07(水) 21:42:42ID:???
速く答えてください
0304nobodyさん2005/12/07(水) 22:17:29ID:???
嫌です
0305nobodyさん2005/12/07(水) 22:32:52ID:???
ソースを丸写しとか勉強にもならないしショウモナイネ。
糞のやることだ。
0306nobodyさん2005/12/07(水) 22:36:22ID:???
>>300
メールメッセージヘッダのFrom:フィールドに書く。

0307nobodyさん2005/12/07(水) 23:33:28ID:jWNRrWnp
クラスにあるメンバ変数をJavaとかC++みたいに直接出力することってできないの?

class Human {
 var $name;

 function getName() {
  echo $this->name;
 }
}

$human = new Human;
$human->$name = "名無しさん";

// これはだめ
echo $human->$name;

//これはOK
echo $human->getName();

みたいな感じでメソッドを通してのみやり取り可能なのかな?直接代入はできて参照はできないってなんか変な感じなのですが直接参照する方法とかあるんでしょうか?
0308nobodyさん2005/12/07(水) 23:45:14ID:???
マニュアル読め
0309nobodyさん2005/12/07(水) 23:45:29ID:???
class Human {
 var $name;
^^^^^ここを publicにすれば
echo $human->name;
このようにアクセスできますよ!
0310nobodyさん2005/12/07(水) 23:46:03ID:???
varはpublicと同義だつーのに
0311nobodyさん2005/12/07(水) 23:49:02ID:???
>>307
いや、$human->name;の$が余分なんでしょ

>>280
268のどこがそのままじゃ動かない?
0312nobodyさん2005/12/07(水) 23:56:30ID:???
別に余計なわけじゃない。

$name = "name";
echo $uma->$name;
0313nobodyさん2005/12/07(水) 23:58:21ID:???
くだスレでやれよ
03143072005/12/08(木) 00:08:25ID:???
php5へ上げたら直りました。php4で使うもんじゃないですね(-д-)
0315nobodyさん2005/12/08(木) 00:41:46ID:???
>>314
きみはじつにばかだな。
0316nobodyさん2005/12/08(木) 02:21:19ID:???
これがPHPクオリティ
0317nobodyさん2005/12/08(木) 02:52:53ID:???
$a = array('aaa', 'bbb', 'ccc', 'nullpo', 'ddd');

という配列の中に
ある要素が含まれているか判定したいのですが
foreachなどを使わずにスマートに行う方法はないでしょうか。

'bbb' => true
'gaxtu' => false

みたいな感じになればいいです。
0318nobodyさん2005/12/08(木) 02:53:34ID:???
マニュアルに書いてある
0319nobodyさん2005/12/08(木) 03:04:03ID:???
>>317 さんへ

実は私もその問題で以前悩んだことがあります。
googleで検索してもMLに投げてもぜんぜんわかりませんでした。
そこで友人のハカーに相談したところ殆どの方がご存じ無いような
のですがphpの裏マニュアルが存在するということがわかりました。
特別にお教えしますが、絶対に人には教えないで下さいね。

http://jp.php.net/manual/ja/function.in-array.php
0320nobodyさん2005/12/08(木) 03:12:55ID:???
すげー感動しました!!
絶対に誰にも教えません
0321nobodyさん2005/12/08(木) 05:45:08ID:???
print "<a href=\'"$script_php."?view=".$i."\'">a</a>\n";

この描き方でT_VARIABLEエラーが出るのですがどう直したらいいですか?
やってるうちにわけわからなくなりました。。
■ このスレッドは過去ログ倉庫に格納されています