【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カテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え。理解できないならムリに使うな。
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
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)されてより効率がよくなったから。
わざわざ関数を通してオーバーヘッドを増やすのはナンセンス。
0285nobodyさん
2006/10/11(水) 13:47:02ID:P+AC1Js6愛猫の動画を365日自分の携帯用ホームページに表示したいです
365本の動画はすでに1〜365まであります
教えてくださる方、お願いします。
0286280
2006/10/11(水) 13:49:42ID:i80IIJilありがとうございました。
283は私じゃありません。
0287nobodyさん
2006/10/11(水) 13:53:04ID:???動画が http://exsample.com/movie1.mpg 〜 http://exsample.com/movie366.mpg
というURLになってるとして(閏年を考えたら366本必要だよ)
サイトからのリンク
<a href="movie.php">今日の動画</a>
movie.php
<?php Location("http://exsample.com/movie" . (date("z") + 1) . ".mpg"); ?>
とすりゃいいんじゃないの。
0291nobodyさん
2006/10/11(水) 14:30:03ID:???0292nobodyさん
2006/10/11(水) 14:56:54ID:???どうやらCGIプログラムを使うといいらしいのですが、
CGIについてまったくのド素人なため、1から作るというのが難しい状況です
お勧めのフリーCGIプログラムがありましたら教えてください
0295nobodyさん
2006/10/11(水) 15:20:56ID:???いいのでしょうか?getimagesizeで縦や横のサイズが500以上だったら300に
する、みたいなことはできたのですが、それだと、元の画像の縦横サイズが
変わってしまいます。縦が小さくなったら、同じ比率分だけ、横も
縮小させたいのです。どうか宜しくお願いします。
0296nobodyさん
2006/10/11(水) 15:28:02ID:???ありがとう。
0297nobodyさん
2006/10/11(水) 15:32:22ID:???小学校からやり直す?
$length = 200;
$size = getImageSize($targetfile);
if($size[0] > $length){
$width = $length;
$high = $size[1] * $length / $size[0];
}else{
$width = $size[0];
$high = $size[1];
}
0298nobodyさん
2006/10/11(水) 15:45:28ID:???http://masago.kir.jp/php20040218.php
No29.大きさを変えようっ(サムネイル) ---- GDライブラリ[3]
離れPHP島のサンプルは参考になりますね!
便利☆便利(^^)v
0299nobodyさん
2006/10/11(水) 15:50:48ID:???ありがとう。
0301nobodyさん
2006/10/11(水) 16:39:42ID:WiH1H+/l対応する $_POST[] の中身って何になりますか?
0303nobodyさん
2006/10/11(水) 16:47:25ID:WiH1H+/l何も記入されていない状態、と、
普通は捉えてもらえると思いましたがorz
0305nobodyさん
2006/10/11(水) 17:00:10ID:WiH1H+/l>>304
お手数おかけしました…
0306nobodyさん
2006/10/11(水) 17:00:51ID:???ありがとう。
0307nobodyさん
2006/10/11(水) 17:05:36ID:WiH1H+/lVBとは違って、= は代入、 == が比較だぞ!orz
0309nobodyさん
2006/10/11(水) 17:17:32ID:a92Vtxiqhttp://jp.php.net/manual/ja/function.fopen.php
オープンが失敗すると、関数は FALSE を返し、 E_WARNING レベルのエラーを発行します。
とのことですが、プログラム側で失敗した原因を知る方法はありませんか?
0310285
2006/10/11(水) 17:28:29ID:P+AC1Js6>>287さんのやり方で
<html>
<body>
<div align="center">
<a href="movie.php">今日の動画</a><br>
</div>
</body>
</html>
でmovie.phpを
<?php location("http://example/movie/" . (date("z")) . ".amc"); ?>
としましたが
Fatal error: Call to undefined function: location() in /home/virtual/site42/fst/var/www/html/movie.php on line 1
のエラーが返ってきてしまいます
ちなみに見る方がおばさんばかりなので、携帯用動画(3gp amc)しかありません
親切な方、よろしくお願いします
0311nobodyさん
2006/10/11(水) 17:35:30ID:WiH1H+/l■ このスレッドは過去ログ倉庫に格納されています