【PHP】下らねぇ質問はここに書き込みやがれ 30
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/10/05(木) 01:38:25ID:y1WWhz/pまず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆質問する場合の注意
1. 自分のIDを表示させること。(メール欄に何も記述しないでください)
2. サーバーのOS、WebサーバーとPHPの種類やバージョン等を明記すること。
3. 己の行った操作、変更などを詳しく明記すること。
4. エラーメッセージはそのまま表記すること。「エラーが出ます」では絶対分かりません。
5. 質問者としても態度をわきまえること。
6. 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・質問者は必ずIDを表示させてください。(メール欄に何も記述しないでください。)
・2回目以降は最初に質問した際のレス番号を名前欄に入れてください。
(逆に回答者は質問者に対して>>(アンカー)をつけて答えてください。)
・解決しなくても回答をもらった場合はお礼を言う。
(荒らし、煽りは除く。逆に煽られたときも、無闇に反論せずスルーすべし)
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え。理解できないならムリに使うな。
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
0184nobodyさん
2006/10/09(月) 15:09:32ID:???超・極めるPHPにcURL関数の使い方が説明してあったよ。
http://www.amazon.co.jp/exec/obidos/ASIN/4798111058
http://www.kiwameru-php.net/contents/toc.php
「cURLで外部サーバーにアクセス」
http://www.kiwameru-php.net/support/codes.php
「cURLで外部サーバーにアクセス」のサンプルスクリプト
http://www.kiwameru-php.net/support/download.logic.php?list=k2_5
使用例では、mixiにログインする説明だった。
0185183
2006/10/09(月) 15:17:21ID:???レスありがとうございます。
びっくりしたことに、ちょうどその書籍目の前にありました。
ただ、これに関しては同サーバーから相手先のデータを読み込んで表示する、
という感じですよね。
直接該当ページに移動するのは無理でしょうか?
0186nobodyさん
2006/10/09(月) 15:33:17ID:???0187nobodyさん
2006/10/09(月) 18:01:38ID:???例: 'abcdefg' => 'bcdef'
substr($str, 1, strlen($str) - 2) ←これより良いのありますかね?
0188nobodyさん
2006/10/09(月) 18:07:55ID:???0189nobodyさん
2006/10/09(月) 18:33:58ID:???サンクス
0190nobodyさん
2006/10/09(月) 19:06:57ID:???$host = ホスト(略);
$id = crypt($host.$_SERVER['USER_AGENT'].date("w"), "HOGE");
としてるんですが、こんなんでいいのでしょうか?なんか書き込んだ人を個別に判別できる値とかないんでしょうか?
0191nobodyさん
2006/10/09(月) 19:16:58ID:???0193nobodyさん
2006/10/09(月) 20:25:08ID:???imgの中に、widthなどをいれると全てそのサイズになってしまいます。
ある一定以上大きい画像は幅、高さを縮小させて表示させるには、imageizeなどを
使えばいいのでしょうか?
もし、よろしければ詳しいやり方を教えてください。お願いします。
0194nobodyさん
2006/10/09(月) 20:30:38ID:???1.getimagesize()でファイルの縦横サイズを取得する。
2.縦横がそれぞれ指定サイズ以上かを判定する
3.縦か横のどっちか大きい方をheightまたはwidthで指定する
だけかと。こんなのいちいち人に聞くような内容じゃないぞ?
0195181
2006/10/09(月) 20:36:00ID:/lkovAUh感謝です。
廃止予定となっているのがちょっとだけ気になりますが
http://jp.php.net/manual/ja/ref.mime-magic.php
php4なら仕方ないですね。
あと、手元にあるmagic.mimeがヘボいのか
誤判定がしばしばあるのですが、
これはどっかに質のよいmagic.mimeが転がってるのを探せばいいんでしょうか。
引き続き探してみます。
0196nobodyさん
2006/10/09(月) 20:57:00ID:???具体的にどう効率が良いの?
自分のウェブサイトで使う様な、あくまで趣味感覚で一人で開発して居る人には関係無いよね?
0197nobodyさん
2006/10/09(月) 21:14:42ID:???実際、オブジェクト指向じゃなくても同程度(場合によってはそれ以上)効率良くプログラムを書くことはできる。
気になるなら勉強すればいいし、もっと深く話を聞きたいなら違うとこに行ったほうがいい。
議論するほどにスレ違い&板違いな方向に行くのは目に見えてる。
一人で開発してるなら「どこにどんな処理があるか」「この処理はどこに書かれているか」が分かってるからほとんど必要ない。
最低限、よく出てくる処理をfunctionにしておけばいいと思う。
0198nobodyさん
2006/10/09(月) 21:35:07ID:???まず、Cの構造体が便利だと思えるかどうか。
便利だと思えるなら、次の段階として構造体のメンバに関数のリファレンスを格納できたら便利だと思えるかどうか。
それが便利だと思えるなら、その次の段階として、似てるけど微妙に違う構造体をたくさん使うとき
おおもとになる型枠的なものを用意して、その子分をこしらえてながら開発出来ると便利じゃないか、と。
まあ、以上のものにちょっと機能を加えて便利にしたものがオブジェクト指向って感じか。
まず、構造体が便利だと思えなければ話が始まらないが、、PHPって素の構造体は・・・連想配列で代用か?
0199nobodyさん
2006/10/09(月) 21:36:16ID:???超えると文字化けしてしまう・・・
PEARでメール送るときって件名の文字制限ってあるんですか?
確か1000ByteまでOKだったはずなんだけど・・・
0200nobodyさん
2006/10/09(月) 21:37:59ID:WzDdpX/2現状態ではプログラムの中で決まったHTMLを出力する場合に、
<?php
echo <<< HTML
<html>
<head><title>test</title></head>
HTML;
?>
と出力するようにしています。しかしこれだと、
<?php
function test(){
if(〜){
echo <<< HTML
<html>
<head><title>test</title></head>
HTML;
}
}
?>
のようにインデントを入れた場合にインデントまで出力することになってしまいます。
echoやprintを使用して一行ずつ出力することも考えましたが、ソースの可読性など考えるといい方法とは思えませんでした。
こういう場合は外部ファイルにタグを記述しておき、それをfile関数などで読み出して、出力するほうがよいのでしょうか?
意見のなどよろしくお願いします。
0201nobodyさん
2006/10/09(月) 22:19:52ID:???ttp://www.bnote.net/php/pear/mail_02_jp.shtml
RFC2822
>行の長さの制限
>この標準では1行中の文字数に2つの制限がある。それぞれの行の文字はCRLF
>を除いて、決して998文字以下でなければならず(MUST)、78文字以下であるべ
>きである(SHOULD)。
0202nobodyさん
2006/10/09(月) 22:29:41ID:bFRkADqN行いたいのですが,文字化けしてて使えません.
対策方法お知りの方おられましたら,お教え願えないでしょうか?
0203nobodyさん
2006/10/09(月) 22:36:35ID:???それだ!!
でも、文字数は20〜30文字ぐらいなんですよ・・・
【100yen or 200yen】お前ら最高!でも俺の方が最高!
上みたいなヤツだと「最高!」あたりが文字化けしてしまうっす・・・
0206203
2006/10/09(月) 22:44:52ID:???あ、すみません。最後の「最高!」でした。
それ以前は部分は文字化けしません。
今確認したところ、件名自体を短くして「俺は最高!」
のみに縮めた場合は文字化けせずに問題なく送信できます。
0207205
2006/10/09(月) 22:46:19ID:???×
>あ、すみません。最後の「最高!」でした。
>それ以前は部分は文字化けしません。
○
>あ、すみません。最後の「最高!」でした。
>それ以前の部分は文字化けしません。
0209nobodyさん
2006/10/09(月) 22:59:11ID:???0210nobodyさん
2006/10/09(月) 23:07:32ID:???が、俺はついついインデントを全排除してとにかく楽な方に逃げてしまうなあ。
0212nobodyさん
2006/10/09(月) 23:27:09ID:???インデントするもなんも、ヒアドキュメントの終端IDのある行はインデントできんでしょ。
見栄えもなんもあるかいな。
0213nobodyさん
2006/10/09(月) 23:29:29ID:???0214nobodyさん
2006/10/09(月) 23:30:22ID:???0215nobodyさん
2006/10/10(火) 00:33:53ID:???> ソースの可読性など考えると
ソースの可読性を考えてるやつはプログラムコードの中にHTMLを書いたりしない。
> こういう場合は外部ファイルにタグを記述しておき、それをfile関数などで読み出して、出力するほうがよいのでしょうか?
当然。
どうしてもソース中にHTML書きたいんなら、Perlじゃないんだからヒアドクなんて使わず
if(〜){
?><html><?php
?><head><title>test</title></head><?php
}
みたいにHTMLモードに入っちゃえば?
0216nobodyさん
2006/10/10(火) 00:34:08ID:???includeじゃ対応できない部分もあるよ。
たとえばwhileなどで動的にテーブル作る(セル数が変動する)ときとか。
これはプログラムの流れに沿ってHTMLも書かなきゃならんので、
やはりソースに合わせてインデントしたくなる。
0217200
2006/10/10(火) 01:02:53ID:???他にいい方法がない場合は外部ファイルに
<?php
$header = create_function('$title','
echo <<< HTML
<html>
<head><title>$title</title></head>
HTML;
');
?>
と書いてrequireなどして逃げようと思ってます。
0218nobodyさん
2006/10/10(火) 01:17:02ID:???なぜわざわざ関数化するんだよ。
ヒアドキュメント内の変数だって{}で囲めば、
requireで読み込んだあとに変数部分がきちんと展開されるぞ。
0219nobodyさん
2006/10/10(火) 01:25:19ID:???俺は表示の動的制御に関しては読み込まれるHTML側に<?php 〜 ?>埋め込みでPHPコードを書くかな。
HTMLファイル側に仕込むのは
・変数表示
・表示のフォーマット処理
・表示のON/OFF制御のためのif
・ループ処理
のみに制限すればSmarty辺りのテンプレートとほぼ同様の可読性を維持できるから問題は感じない。
逆に言うと、あの辺のテンプレートと同程度のコードは許容しないと外部ファイル化はまず無理。
>>217
いくらなんでもその書き方はありえないだろ。
外部ファイルにしている意味が全くないぞ。
0221nobodyさん
2006/10/10(火) 02:11:18ID:???ショートタグ派的にはだいたいこんな感じ。
(というか、テンプレートにこういう風に書けるように、require前に変数を作成しておく)
<? foreach ($this->list as $item) : ?>
<tr>
<td><?=h($item->number)?></td>
<td><?=h($item->name)?></td>
<? if ($item->displays_body) : ?>
<td><?=h($item->body)?></td>
<? else : ?>
<td>ひみつ</td>
<? endif ?>
</tr>
<? endforeach ?>
ちなみに俺はテンプレートの中でwhileは極力使わない。
ループは全てforeachで済ませられるよう努力する。
0222nobodyさん
2006/10/10(火) 05:41:49ID:???forを使わない、ってことなら分からなくもないけど。
0223221
2006/10/10(火) 07:59:33ID:???まあ、そりゃそうだ罠。つーか、>>216でwhileの話が出てたから一応言ってみただけなんだけど。
ロジックを表示周りに一体化させたい衝動に駆られると、whileも出てくるんじゃない?
あとは、while (DBからfetch) の中で直にechoして、メモリをすっきりさせてみたい年頃だったりとか。
0224200
2006/10/10(火) 08:37:53ID:???>>218
要するに、呼び出し側で
function test(){
$title = "testaaaa";
require("header.php");
}
としておき、header.phpで
<?php
echo <<< HTML
<html>
<head><title>$title</title></head>
HTML;
?>
ということでよろしいのでしょうか?
0225183
2006/10/10(火) 09:28:01ID:???通常のブラウザからのログインと同じように
対象のURLに自身のPCからアクセスするという意味です。
ためしにcURLでやってみたら、
上手くログインはできたものの
自身のサーバ経由で読み込むため、
ログイン先のシステムによっては、相対パスなどで指定されていて
リンク先などが正常に表示されませんでした。
0226nobodyさん
2006/10/10(火) 09:30:10ID:???0227nobodyさん
2006/10/10(火) 10:43:46ID:???PHPでプロキシーサーバーを作りたいってことなのかな?
0228nobodyさん
2006/10/10(火) 11:01:58ID:???0229183
2006/10/10(火) 11:33:55ID:???いえ、逆に単にID/PASSが分からないログインボタンを作りたいだけです。
現在の状況(cURL)がプロキシサーバーになってしまっているので困ってます。
知人にログインして見せたい情報があるんですが、
ID/PASSは知らせたくない、というだけの状態です。
クライアントPCから相手先のサーバにデータを送る必要があると思うのですが、
上の場合、PHPサーバーから相手先のサーバにデータを送ってしまうので
難しいのでしょうか。
0230183
2006/10/10(火) 11:40:05ID:???PHPサーバーから相手先のサーバーにPOSTしても
ログイン先のサーバーでは
PHPサーバーと対のセッション情報保存されるわけで、
クライアントがログインできたかどうかとは全く別問題なんですよね
0231nobodyさん
2006/10/10(火) 13:07:37ID:???こういうのって発覚するとロクな事にならないので止めといた方が良い。
単にログイン後のページを見せたいのなら
スクリーンショット撮って適度にモザイクかけて渡せ。
0232nobodyさん
2006/10/10(火) 13:29:01ID:???だから呼び出す側でも関数化する必要ないし、呼び出される側では変数を{}で囲めって。
正しくは(最も単純なのは)↓
$title = "testaaaa";
require("header.php");
としておき、header.phpで
<?php
echo <<< HTML
<html>
<head><title>{$title}</title></head>
HTML;
?>
0234nobodyさん
2006/10/10(火) 15:12:57ID:VCBK9AiMでも全然分かりません…
親切な方、いらっしゃったら教えてください
画像は365枚あります。
0235nobodyさん
2006/10/10(火) 15:33:44ID:???<img src="hair_<?php printf("%03d",date("z")) ?>.jpg">
0236nobodyさん
2006/10/10(火) 15:47:46ID:???0238nobodyさん
2006/10/10(火) 16:47:44ID:???0239nobodyさん
2006/10/10(火) 17:02:05ID:???何も危ないのはアダルトだけじゃないよ。
価格.com事件のようなのもあるしね。
0240nobodyさん
2006/10/10(火) 17:03:09ID:???てぶ鯖は・・・
♪誰でもどんなファイルでもアップロード可能!!
♪アップロードされているファイルは誰でもいくらでもダウンロード可能!!
♪たくさんアップロードした人にはなんと抽選でプレゼント!!
だからみんなで楽しく使っちゃおう!!
ftp://tebukuro.ath.cx
User:anonymous
password:メールアドレス
++++*******てぶ鯖********++++
0242nobodyさん
2006/10/10(火) 17:51:02ID:VCBK9AiMありがとうございました!!なんとか出来ました!
0243nobodyさん
2006/10/10(火) 19:27:44ID:HtJUF5F+このような配列が有る場合に
000は何個
111は何個
222は何個
と配列の中身をカウントする方法は有りませんでしょうか?
0245sage
2006/10/10(火) 19:57:14ID:???下記のように文字化けします。
心当たりありませんか?
?¢?¢?¢?¢?¢
とか
\???\?\£
0246nobodyさん
2006/10/10(火) 20:16:03ID:HtJUF5F+ありがとうございます。
理解出来ませんでした。
もう少し優しいやり方はないでしょうか?
0247nobodyさん
2006/10/10(火) 20:30:23ID:???244じゃないけどそれが理解できなかったら他の方法も無理なんじゃないかな。
これ以上ないくらいに分かり易く説明してくれてるのに。
決して難しくないから頑張って理解してみるといいと思うよ。
@要素を1個取り出す
Aarray_diffをかける
B減った個数を調べる
順を追って解決していくといいよ。
別な方法としては
$aの要素をキーとする新しい配列を作り、1つ要素があるごとにそのキーの値を1増やす。
これを$aの全ての要素について行う。
0249nobodyさん
2006/10/10(火) 20:34:22ID:???$a = array('111', '000', '222', '222', '000', '222', '888', '426', '222');
foreach ($a as $value) {
if (!isset($b[$value])) {
$b[$value] = 1;
} else {
$b[$value]++;
}
}
print_r($b);
前にもやったぞこれ。
0250nobodyさん
2006/10/10(火) 20:39:20ID:???0251nobodyさん
2006/10/10(火) 20:54:22ID:???つーか、array_count_values($a)で一撃だと思うんだが。
250みたいな問題が起こる可能性があるなら、値を全部serializeすればいいと思う。
0252nobodyさん
2006/10/10(火) 21:02:05ID:HtJUF5F+こんだけ時間掛けてやっと実行出来たのがこれなのですが
問題等ありますでしょうか?
<?php
$a = array('111', '000', '222', '222', '000', '222', '888', '426', '222');
$a2=array_unique($a);
foreach ($a2 as $a2_num => $aaa) {
foreach ($a as $a_num => $aaaa) {
if ($a2[$a2_num]==$a[$a_num]) {
$cnt[$a2_num]=$cnt[$a2_num]+1;
}
}
$a_cnt[$a2[$a2_num]] = $cnt[$a2_num];
}
while(list ($key, $val) = each($a_cnt)) {
print (" $key は、$val 個です<br>\n");
}
?>
0253nobodyさん
2006/10/10(火) 21:10:21ID:???serializeって…こうか!
array_count_values(array_map('serialize', $a));
目から鱗w
0254nobodyさん
2006/10/10(火) 21:21:17ID:???凄いですね
$a = array('111', '000', '222', '222', '000', '222', '888', '426', '222');
$b = array_count_values($a);
while(list ($key, $val) = each($b)) {
print (" $key は、$val 個です<br>\n");
}
数行で同じことが出来ました。
>>252と比べると非常に情けないです・・・・
025571
2006/10/10(火) 22:44:48ID:???同一Windowsマシン上でApache + PHP & SQL Serverをうごかして、
PHPからSQL Serverのデータを取ってくる際、
odbc_connectやmssql_connectで出力エンコーディングを
指定することはできないのでしょうか?
いろいろ調べましたが、エンコーディングを設定するということができないようです。
FreeTDSのodbc.iniには書けるようですが、Linux用のドライバですし〜や@は化けるようです。
以下のようにCOMを使ったらできたんですが重いです。
$conn = new COM("ADODB.Connection", NULL, CP_UTF8);
$conn->Open("Driver={SQL Server};Server=servername;Uid=user;Pwd=passwd;Database=databasename");
なんというか、こんなやり方でしか、エンコーディング指定できないというのは、
かなり信じられないんですが・・・本当に困ってます。
何か知っている人がいたらご教授ください。
0256nobodyさん
2006/10/10(火) 23:14:34ID:UY1nIn3b全て求めたい:
例: 00, 01, 02, …… 98, 99, …… 0a, 0b, 0c, …… 9x, 9z
数字のループは分かるんだけど、文字列のループはどうすれば出来るのかな?
for ($i = 0; $i < 99; $i++) {
echo $i;
}
0257nobodyさん
2006/10/10(火) 23:16:53ID:UY1nIn3b(int 0-9)と(str a-z)の組合せで出来る二文字のパターンを、ループ処理で
全て求めたい
0258nobodyさん
2006/10/10(火) 23:34:23ID:???echo chr($i);
}
0259nobodyさん
2006/10/10(火) 23:41:28ID:???echo base_convert($i,10,36);
}
0260nobodyさん
2006/10/10(火) 23:55:07ID:UY1nIn3b0261nobodyさん
2006/10/11(水) 00:03:42ID:???0-9、a-z、A-Zでは?
0262nobodyさん
2006/10/11(水) 00:16:16ID:???foreach(range('a','z') as $n){
$a[] = $c.$n;
}
}
print_r($a);
---
ところでこれだとなんでzzまで出ちゃうんだ?
for($i='a';$i<='z';$i++){
echo $i;
}
0263nobodyさん
2006/10/11(水) 00:18:11ID:???function jump(&$i) {
if ($i == 58) $i = 65;
elseif ($i == 91) $i = 97;
}
for ($i=48; $i<=122; $i++) {
jump($i);
for ($j=48; $j<=122; $j++) {
jump($j);
echo chr($i).chr($j);
}
}
0266nobodyさん
2006/10/11(水) 00:27:32ID:???foreach($a as $b){
foreach($a as $c){
foreach($a as $d){
$aa[] = $b.$c.$d;
}
}
}
print_r($aa);
0269nobodyさん
2006/10/11(水) 02:22:14ID:8Czx1vGv(実際は1行ずつ改行されてます)
上記のようなユーザーエージェントがある場合に
機種名だけを切り取りたいのですが
うまくやる方法はありませんでしょうか?
お手本ありましたらお願いいたします。
0270nobodyさん
2006/10/11(水) 07:06:40ID:???機種名というのは携帯電話端末の?
ユーザーエージェントの識別名は、クライアント側の自己申告なので
難しいと思う。まず各メーカーの仕様書を見ろ。
$lines = file ('filename.txt');
foreach ($lines as $line) {
$result = str_word_count ($line, 1);
echo "{$result[0]}<br>\n";
}
ほとんどのユーザーエージェントは、機種名を識別名文字列の最初に持って来ているので
これで取得出来ると思うが……。
0272nobodyさん
2006/10/11(水) 08:00:11ID:???フレームワーク使うからurlが変わっちゃいます。
いままでのurlには末尾に.htmがついていたのですが、
フレームワークのurlには.htmがついていません。
.htm 付のurlでアクセスがあった場合.htm なしのurlに
転送できるのでしょうか。
0273nobodyさん
2006/10/11(水) 08:25:09ID:???トップだけでいいなら元々のHTMLと同じ名前のHTMLを1個置いといて
中に
<?php Location("http://フレームワークなサイトのURL/"); ?>
って1行仕込んどくだけでいいと思うけど。
0274nobodyさん
2006/10/11(水) 08:37:40ID:???0275nobodyさん
2006/10/11(水) 09:46:15ID:???ありがとう。
0276nobodyさん
2006/10/11(水) 10:11:16ID:???0278nobodyさん
2006/10/11(水) 12:35:16ID:???ありがとう。
0279nobodyさん
2006/10/11(水) 12:41:52ID:???0280nobodyさん
2006/10/11(水) 12:57:14ID:i80IIJil言われるんですが、使わない方がいい理由って何かあるんでしょうか?
0281nobodyさん
2006/10/11(水) 13:20:32ID:???「instanceof演算子を使って下さい」
0282nobodyさん
2006/10/11(水) 13:24:57ID:???お前も日本語読む努力をしようよ。
「何故、これが非推奨になってるのか」を聞いてる質問だろ?
これが非推奨でinstanceof演算子を使えといわれてることは
質問者はすでに理解してるんだよ。その理由を聞いてんの。
0284nobodyさん
2006/10/11(水) 13:39:48ID:???PHP5で演算子化(instanceof)されてより効率がよくなったから。
わざわざ関数を通してオーバーヘッドを増やすのはナンセンス。
■ このスレッドは過去ログ倉庫に格納されています