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

【PHP】下らねぇ質問はID出して書き込みやがれ 88

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/09/16(水) 09:39:37ID:???
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 87
http://pc11.2ch.net/test/read.cgi/php/1251447028/

◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】

◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)

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

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

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0409nobodyさん2009/09/27(日) 14:06:19ID:???
義務を求めるのなら有料でPHP教えてくれる先生に聞けばいいよ
ここは義務で回答しに来てるわけではなく、あくまでボランティアだ
0410nobodyさん2009/09/27(日) 14:07:23ID:wLv38OPr
>>402
あら、コンパイルからですか。
64bit版落とすのも面倒なので今回は諦めておきます。
次回PHPが大きくヴァージョンアップしたら、ついでに64bit版に変えてもいいですね。
ありがとうございました。
0411nobodyさん2009/09/27(日) 14:20:37ID:???
落とすのが一番楽だろw
それが面倒なら何ができるんだw
0412チラシの裏2009/09/27(日) 14:36:50ID:???
ticks、すげぇー!超便利!
これCとかJavaにもあったらいいのにな
0413チラシの裏2009/09/27(日) 15:57:19ID:???
でも、関数のオーバーロードはサポートされてない
残念っ!!!
0414nobodyさん2009/09/27(日) 21:14:19ID:???
>>408
あはは、あまりにあれ過ぎて君が頓珍漢な勘違いしたままなのだが誰も教えてくれないんだよ。
0415nobodyさん2009/09/28(月) 00:37:04ID:nPgUeQzt
超絶初心者の糞下らねえ質問なんですが
<?php

$aaa = $_GET["bbb"];

print ($aaa);

?>
をindex.phpとしたとき
http://localhost/?bbb=文字列
というURLでアクセスすると
文字列がページに表示されますが

このURLの
bbb=を省いて
http://localhost/?文字列
これで文字列がページに表示するようにしたいのですが
どうすればいいんでしょうか?
よろしくお願いします
0416nobodyさん2009/09/28(月) 00:39:39ID:???
>>415
$_SERVER['QUERY_STRING']
0417nobodyさん2009/09/28(月) 00:41:15ID:???
>>415
apache使ってるなら、mod_rewriteで置き換えるしか無いんじゃない?
0418nobodyさん2009/09/28(月) 00:54:12ID:???
localhost/index.php/文字列
とやって、PATH_INFOで受け取る手もある。拡張子隠蔽はMultiViewとかmod_rewrite
0419nobodyさん2009/09/28(月) 00:58:51ID:nPgUeQzt
>>416-418
迅速なレスありがとうございます
超絶初心者なのでわからない単語などありますが
そこらへんはググって試行錯誤やってみます

ありがとうございました
0420nobodyさん2009/09/28(月) 02:52:20ID:gXHj/gRY
0421nobodyさん2009/09/28(月) 03:11:14ID:???
>>420
�_
0422nobodyさん2009/09/28(月) 06:11:36ID:xItyGbMU
http://www.php.net/manual/ja/language.oop5.iterations.php
の「例3 IteratorAggregateを実装するオブジェクトの反復処理」ですが:

<?php
class MyCollection implements IteratorAggregate
{
private $items = array();
private $count = 0;

// Required definition of interface IteratorAggregate
public function getIterator() {
return new MyIterator($this->items);
}

public function add($value) {
$this->items[$this->count++] = $value;
}
}
$coll = new MyCollection();
$coll->add('value 1');
$coll->add('value 2');
$coll->add('value 3');

foreach ($coll as $key => $val) {
echo "key/value: [$key -> $val]\n\n";
}
?>

…を実行するとHTTP 500 Internal Server Errorが出ます。
最後のforeachをコメントアウトしてやるとエラーは出なくなりますが、真っ白で何も表示されません。
どこを直せばよいか教えてください。
0423nobodyさん2009/09/28(月) 06:53:36ID:???
>>422
echo "key/value: [{$key} -> {$val}]\n\n";
0424nobodyさん2009/09/28(月) 06:59:12ID:xItyGbMU
>>423
ありがとうございます。
残念ながら、{ }を付けてもやっぱりHTTP 500 Internal Server Errorが出ます。
何か他に思い当たるところはないですか?
04254222009/09/28(月) 07:16:07ID:xItyGbMU
ちなみに
// echo "key/value: [{$key} -> {$val}]\n\n";
と、その行だけコメントアウトしてもHTTP 500 Internal Server Errorが出ます。
php.netによると、正しい出力は

rewinding
current: value 1
valid: 1
current: value 1
key: 0
key/value: [0 -> value 1]

next: value 2
current: value 2
valid: 1
current: value 2
key: 1
key/value: [1 -> value 2]

next: value 3
current: value 3
valid: 1
current: value 3
key: 2
key/value: [2 -> value 3]

next:
current:
valid:

…となるそうです。
何かのヒントになりますか?
0426nobodyさん2009/09/28(月) 08:11:32ID:???
トラブルの九割は、実に下らない取るに足りない原因で起きているという観点から一応聞いてみる。

もちろんMyIteratorクラスは、そのページのサンプル通りのものを

><?php
>class MyCollection implements IteratorAggregate

この二行の間に書いているか、またはincludeしてるんだよね?

それと、エラーログ見てみようよ。
04274222009/09/28(月) 08:13:11ID:xItyGbMU
<?php
class MyCollection implements IteratorAggregate
{
private $items = array();
private $count = 0;

public function getIterator() {
return new MyIterator($this->items);
}

public function add($value) {
$this->items[$this->count++] = $value;
print_r($this->items); // 追加した行; 配列の内容を表示するため
}
}
$coll = new MyCollection();
$coll->add('value 1');
$coll->add('value 2');
$coll->add('value 3');

//foreach ($coll as $key => $val) {
//echo "key/value: [{$key} -> {$val}]\n\n";
//}
?>
一行追加してみました。その結果、

Array ( [0] => value 1 [1] => value 2 [2] => value 3 )

…と、配列に正しくkeyとvalが入っているのが分かります。
後は問題は「なぜforeach文が正しく動かないか」です。
自分が出来るのはここまでです。どなたかお力を貸してください。
04284222009/09/28(月) 08:18:10ID:xItyGbMU
>>426
ありがとうございます。

>もちろんMyIteratorクラスは、そのページのサンプル通りのものを
>
>><?php
>>class MyCollection implements IteratorAggregate
>
>この二行の間に書いているか、またはincludeしてるんだよね?

いえ、MyIteratorクラスは>>422に書いた通りで、何もincludeしていません。
「何」を「どのように」includeすればいいんですか?
それと、エラーログはどうやって見るのですか?
0429nobodyさん2009/09/28(月) 10:00:32ID:A4zPaHMy
どっちかっていうとMysqlのことなんですが
mysql_eofは廃止になったとことですけど
mysql_errorやmysqlerrnoでどうやって終端チェックできるんでしょうか?
if(mysql_errno($db)!=0){echo "End of Record";}
とか
if(mysql_errno($db)){echo "End of Record";}
やってるんだけど0が帰ってきて、終端とそうでない場合に違いがでないんだけど...
0430nobodyさん2009/09/28(月) 10:14:57ID:???
>428
エラーログの出し方を知らずにコーディングとか、服を着ないで原宿に買い物に行くようなもの。

error_reportingとdisplay_errorでぐぐれ、もしくはマニュアル検索れ。
0431nobodyさん2009/09/28(月) 11:51:50ID:/RfVJ8GX
windowsでphp5.3のスレッドセーフ版を使う場合、
スレッドが作られる数だけ
タスクマネージャのプロセスがたくさん表示されるってことでしょうか?
04324222009/09/28(月) 13:50:33ID:xItyGbMU
>>430
error_reportingは知ってたんですけど、
display_errorsがOffになってて表示されなかったようです
(どっかの例でdisplay_errorsをOffにしたんですよ、確か、ちきしょー)。
それでエラーメッセージ読んでたら速攻で解決しました。
ありがとうございました!
0433nobodyさん2009/09/28(月) 13:54:09ID:???
>>432
お前みたいな責任転嫁野郎は社会のゴミ屑だな
04344222009/09/28(月) 14:13:46ID:???
>>433
いやいや、マジでそうですって。
display_errorsはデフォルトではOnですし、それ以外考えられないですよ。
右も左も分からん人間にdisplay_errorsをOffにさせるなんて
オレオレ詐欺に次ぐ悪質な手口じゃないですか。

で、実際にどこで変えたのか検索しようとしたら
Windows Vistaの糞野郎が「拡張子が".php"のファイルの内容は検索できない」とか言いやがりますし、
世の中絶対におかしいですよ。
ちょっとこれから服を着ないで原宿に買い物に行ってみます。
0435nobodyさん2009/09/28(月) 14:36:59ID:???
どこが悪くて、どう解決したのか書かない奴ばっかりだな。
0436nobodyさん2009/09/28(月) 14:50:46ID:???
>>434
公開する段階ではdisplay_errorsはOffにすべき
おまえがちゃんと読まずに設定書き換えただけ
0437nobodyさん2009/09/28(月) 16:06:56ID:+8HTDnRb
まったく予測もできなく原因もわからないエラーが起こるので
例外処理を書きたいのですが

try{

例外が起こりそうな処理

}catch(Exception $e){

例外時の処理

}

これでよろしいでしょうか?
なにか足りないものがあればお願いします
0438nobodyさん2009/09/28(月) 16:09:50ID:???
>>434
お前俺の友達に似てるな。

ネットに書いてあることをそのままコピペでやって
うまくいかなかったらそいつのせいだと?

馬鹿にするのも大概にしろよ。
0439nobodyさん2009/09/28(月) 16:21:51ID:???
>>437
それでいいよ
ただJavaのようにエラー全てを例外で処理するような言語ではないので
PHPで例外処理使う場合はPDOなんかの勝手にthrowしてくる最近のクラスだけでいいんじゃない?
PHPは後つけのオブジェクト指向なので昔からあるような関数はエラー出て止まるだけだから
そういうものに対しても例外処理をしたいとなると自分でthrowしないといけない
0440nobodyさん2009/09/28(月) 16:32:03ID:+8HTDnRb
>>439
予測不能な物は自分でthrowしなくていいんですね
ありがとうございます
0441nobodyさん2009/09/28(月) 17:09:14ID:???
サーバーサイドで実行できるjqueryのオープンソース phpquery

サーバー側でHTMLをjqueryで整形できるよ。

http://code.google.com/p/phpquery/


$doc = phpQuery::newDocumentHTML("http://www.yahoo.co.jp/");

$html = $doc['div'] -> html();

サーバーサイド側でこんな簡単にHTMLが抜け出せる。
正規表現も使わないで済む。jqueryライクな書き方でOK
0442nobodyさん2009/09/28(月) 19:09:33ID:???
http://pc11.2ch.net/test/read.cgi/hp/1252401448/627
マルチ死ね
0443nobodyさん2009/09/28(月) 20:41:17ID:???
サーバサイドで実行できるってのがうさんくさい紹介だな
PHPなんだからサーバ側処理なのは当たり前だろ
ただのjQueryライクにかけるようにしたクラスライブラリだろ
PHP知らないJS使いが使う分にはいいがこのスレでは不要
0444nobodyさん2009/09/28(月) 21:08:56ID:???
echo@file_get_contents('http://www.yahoo.co.jp/');
これができるって事?
0445nobodyさん2009/09/28(月) 22:16:10ID:???
そんなの既存の関数2つ使うだけで出来るだろ・・

0446nobodyさん2009/09/28(月) 23:54:07ID:???
どなたか431おねがいします
0447nobodyさん2009/09/29(火) 05:28:20ID:???
プロセスとスレッドは異なるもの。
タスクマネージャにスレッドまでは表示しないだろ。
0448nobodyさん2009/09/29(火) 09:48:41ID:ZXmjIu3r
時間に関するスクリプトを組む際、
・ある瞬間をあらわす「時刻」
・時刻と時刻の間を表す「時間」
・時間の量
の三種類の別種のオブジェクトがありうると思いますが
それらを提供しているライブラリがあれば教えてください
0449nobodyさん2009/09/29(火) 09:51:04ID:???
>>448
1
time(); or microtime();

2
意味がわからない

3
意味がわからない


具体的に書いていただかないと回答もつきませんよ
0450nobodyさん2009/09/29(火) 10:55:40ID:???
ディレクトリの使用サイズを取得する為に
disk_total_spaceで取得すると、-844980224の様にマイナスになってしまいます。
正しく取得するにはどうしたらいいですか?
0451nobodyさん2009/09/29(火) 10:56:45ID:???
スレタイ
0452nobodyさん2009/09/29(火) 11:00:21ID:rvLghs2t
ディレクトリの使用サイズを取得する為に
disk_total_spaceで取得すると、-844980224の様にマイナスになってしまいます。
正しく取得するにはどうしたらいいですか?

追記:マイナスは消えたのですが、実際のサイズとは違う値が返ってきました。
0453nobodyさん2009/09/29(火) 11:02:02ID:???
なんでマイナス消えたの?
0454nobodyさん2009/09/29(火) 11:02:10ID:???
>>452
気のせい気のせい
0455nobodyさん2009/09/29(火) 11:06:00ID:???
>>452
二度も書くな
「ID出し忘れました。すみません」ぐらい言えないのかお前
0456nobodyさん2009/09/29(火) 11:18:30ID:???
>>431
挙動は同じ
マルチスレッドを想定しているかそうでないかの違い

>>448
>・ある瞬間をあらわす「時刻」
http://www.php.net/manual/ja/class.datetime.php

>・時刻と時刻の間を表す「時間」
http://www.php.net/manual/ja/class.dateinterval.php

>・時間の量
上の二つの表現だけでは表わせられないもの?
0457nobodyさん2009/09/29(火) 12:00:55ID:CnNpVgYI
>>455
お前ってほんと冷たいよな。
0458nobodyさん2009/09/29(火) 13:52:05ID:???
>>452
duコマンドでとったほうがいいんじゃない?
自分も昔PHPの関数でどうにかとろうとしてうまくいかなかったから
duコマンドで取得することにしたよ
Windowsの場合でも似たようなものがぐぐればVectorで配布されてるので
それ通してやればいいんでないかな
0459nobodyさん2009/09/29(火) 13:54:45ID:lVskSDkS
コードをヘッダの前にズラズラ書くのイヤンな俺はこんな感じで最後にメインルーチン書いて最初に呼び出す習慣なのだがみんなはこんなのやらないの?
他の言語もやってたから、なんかメインルーチン書くと落ち着くし。

<?php $var=main(); ?>
<html><body>
<?php echo $var; ?>
</body></html>
<?php function main(){return $var;} ?>
0460nobodyさん2009/09/29(火) 13:58:00ID:???
viewを最初に書くのは気持ち悪い
0461nobodyさん2009/09/29(火) 14:50:34ID:???
1ファイルでやる分なら別になんでもいいんでない
0462nobodyさん2009/09/29(火) 15:00:36ID:???
>>460
ケチつけるだけじゃなく、より理想的な代案を出すのが出来る大人と言うもんだがなぁ。。。
0463nobodyさん2009/09/29(火) 15:20:38ID:???
>>459
htmlは別ファイルに分けるからそんな事しないなあ。

main関数を作ることは多いけど。
0464nobodyさん2009/09/29(火) 16:44:19ID:nmAs+ASN
http://www.php.net/manual/ja/language.oop5.cloning.php の「例1 オブジェクトのクローン作成」について質問です。
<?php
class SubObject {
static $instances = 0;
public $instance;

public function __construct() {
$this->instance = ++self::$instances;
}

public function __clone() {
$this->instance = ++self::$instances;
}
}

class MyCloneable {
public $object1;
public $object2;

function __clone() {
$this->object1 = clone $this->object1;
}
}
$obj = new MyCloneable();
$obj->object1 = new SubObject();
$obj->object2 = new SubObject();
$obj2 = clone $obj;
print("元のオブジェクト\n");
print_r($obj);
print("クローンオブジェクト\n");
print_r($obj2);
?>
0465nobodyさん2009/09/29(火) 16:47:50ID:lVskSDkS
>>460
>>463
あー、ページ全体を別ファイルから読み込んだり変数から生成するってわけね。
なんか処理のオーバーヘッドが気になってなるべくできる場所は生HTMLで出力するようにしてるんだよね。
0466nobodyさん2009/09/29(火) 16:49:33ID:kJl2bky+
phpでecho "<p>〜<p>"とかしないで「<?p><?php〜?></p>」にするとメリットあるんですか?
0467464の続き2009/09/29(火) 16:51:05ID:nmAs+ASN
この出力が下のようになります:
元のオブジェクト
MyCloneable Object
(
[object1] => SubObject Object
(
[instance] => 1
)

[object2] => SubObject Object
(
[instance] => 2
)
)
クローンオブジェクト
MyCloneable Object
(
[object1] => SubObject Object
(
[instance] => 3
)

[object2] => SubObject Object
(
[instance] => 2
)
)
…でも、$obj2->object2が「2」になる理由が分かりません。$instancesはstaticですよね? だから
$obj->object1 = new SubObject(); $obj->object2 = new SubObject();
で1, 2となって
$obj2 = clone $obj;
で3. 「4」になるんじゃないんですか?
0468nobodyさん2009/09/29(火) 16:59:20ID:???
>>467
無駄に改行するなよ!モニタが小さいからみずれえんだよ!
0469nobodyさん2009/09/29(火) 17:01:53ID:???
>$obj2 = clone $obj;

ここでクローンが作成されてるのが、$obj->object1 だけだからだろ。
0470nobodyさん2009/09/29(火) 17:03:55ID:???
言い方悪かったな。
「$obj->object1 と $obj->object2 のうち、$object1 しかクローンが作成されてないからだろ」
だな。
0471464, 4672009/09/29(火) 17:11:25ID:nmAs+ASN
>>469
ありがとうございます。

ええーっ!でもぉ?…と思ったら、アッー!
$this->object1 = clone $this->object1;
で $obj->object1 だけクローンが作成されてるんですね。
その際に ++self::$instances されるわけですね、なるほど。
$obj2->object2 の「2」は $obj->object2 のクローンのままの「2」なんですね。
ありがとうございました!
0472nobodyさん2009/09/29(火) 19:05:29ID:kJl2bky+
windows でmysqlをpdoで使いたいのですが
pdoで動かすにはどのような設定とファイルが必要でしょうか?
PHPは5.2.10です
0473nobodyさん2009/09/29(火) 20:13:07ID:???
>>472
ブラウザのアドレス欄に「php.net/pdo」と入れると説明が全部出てくる
0474nobodyさん2009/09/30(水) 03:09:00ID:PdAV1SS2
【OS名】Linux
【PHPのバージョン】php4.4.8
【質問内容】
特定のユーザーエージェントだったらフラグを立てる、というつもりで
以下のように書いたところ
Fatal error: Cannot break/continue 1 level in 〜
と出てしまいます。break指定なんかしてないんですが・・・どういうことでしょうか。
function axs_ck(){
  $mfl = 0;
   if($_SERVER["HTTP_USER_AGENT"] =="Webaster") {//自分専用エージェント名。
  $mfl=1;
  }//この行がエラーとか言われてます。
}

ここで立てたフラグを使って、管理者ページへのリンクを付けたり消したり、
立ち入り禁止ページを作ったりしようと思っています。
0475nobodyさん2009/09/30(水) 03:15:49ID:???
>>474
その記述ならエラーは出ないはず。
ファイルが違うとか保存してないとか参照先が違うとかもう一度見直してみるといいかも
04764742009/09/30(水) 03:52:48ID:???
ですよね・・・
axs.phpにこの内容を書いて、呼び出し元のindex.phpに
require("axs.php");
axs_ck();
と書いてUP済みです。
>>474の内容をindex.phpに書けばエラー出ない・・・動く・・・普通に。うーん、どうしてだ。
0477nobodyさん2009/09/30(水) 07:59:41ID:???
ローカル変数になってるぞreturnで返してやれば
0478nobodyさん2009/09/30(水) 15:17:52ID:erJ6uHWW
<ul>
<li>リストです</li>
</ul>

というHTMLから「リストです」の部分を抽出したいと思い

preg_match("/<ul><li>(.*?)<\/li><\/ul>/s",$html,$array);

という正規表現を書いたのですが、抽出できません。
見直すとHTMLが改行されていたので、改行を削除したら抽出されました。
しかし、改行する場合・しない場合もあり、両方対応させたいと思います。

上記コードをどのように変更すればいいのでしょうか?
0479nobodyさん2009/09/30(水) 15:25:41ID:???
パターン修飾子にmを追加してみれば?
試してないから間違ってたらsry

preg_match("/<ul><li>(.*?)<\/li><\/ul>/sm",$html,$array);
0480nobodyさん2009/09/30(水) 15:26:58ID:6H2Mywyh
mt_randで$minと$maxに正の値を与えてるのに
返り値に負の値が出るのはなんでだろうorz
0481nobodyさん2009/09/30(水) 15:32:27ID:???
>>479
いくらs付けてもそれじゃ無理だろ
君のパターンでは<ul>と<li>の間に改行がこないパターンになってるんだから

<?php
$html ="
<ul>
<li>リストです</li>
</ul>
";
preg_match("!<ul>.*<li>(.*?)</li>.*</ul>!s",$html,$array);
print_r($array);
?>
0482nobodyさん2009/09/30(水) 15:33:27ID:i3D4XUwa
改行の後ろにゼロ回以上の繰り返しを入れる
\n*
0483nobodyさん2009/09/30(水) 15:34:12ID:???
\ 使うのが面倒なので、こうかな。

preg_match("|<ul>.*?<li>(.+?)</li>.*?</ul>|ms",$html,$array);
0484nobodyさん2009/09/30(水) 15:39:32ID:???
mは不要
04854782009/09/30(水) 15:50:44ID:erJ6uHWW
>>479-484
みなさんありがとうございます。上手くできました。
/を|にして、ulとliに.*を入れれば良いんですね。
勉強になりました。
0486nobodyさん2009/09/30(水) 16:49:42ID:???
パータン内で|を使わないって決めてるならいいけど
デリミタに|は使わないほうがいいよ
#とか!とか&とかそういうほとんど使わないものをデリミタにしな
0487nobodyさん2009/09/30(水) 17:21:38ID:???
英文では #, !, & 出るから使わないのが常識だろ
04884742009/09/30(水) 17:26:12ID:PdAV1SS2
>>477
!!
index.phpからprint $mfl;としても真っ白な理由が分かった・・・
ような気がします。ありがとうございます。
どうやってもダメなので考え方変えました・・・フラグ立てずにアク禁だけの
ルーチンとリンク用ルーチンに分けることにしました。

スレタイ通りに超くだらない質問を最後に。
ページにアクセスした時にユーザーエージェントごとに違う内容を
100回ループで出力する時、
(1)ヘッダ付近でエージェントを取得してFフラグを立てておき、
  ループの所でtrue or falseで出力
(2)ループの所でエージェントを取得してtrue or falseで出力
やはり(2)が効率悪いですか?
ホスト名取得だと負荷がかかるとかなんとか聞き覚えがありますが・・・
0489nobodyさん2009/09/30(水) 17:29:23ID:???
>>488
ホスト名取得はDNSに問い合わせに行くので負荷がかかる
0490nobodyさん2009/09/30(水) 17:34:32ID:???
>>489
エージェントは問題なし?
エージェント取得を一回で済ませるか、100回取得するか・・・
0491nobodyさん2009/09/30(水) 17:49:19ID:???
>>490
UAの取得って$_SERVER["HTTP_USER_AGENT"] 見るだけでしょ?
既に変数として定義されているんだから、フラグ用の変数を見るのと大差無い。
0492nobodyさん2009/09/30(水) 18:01:48ID:2VTuEGW2
【OS名】XP
【PHPのバージョン】php5
【連携ソフトウェア】?
【質問内容】 質問させて頂きます。
現在ウェブサイトを制作しており、cgiを弄っています。
そこで、何度やってもエラーが出るのですが
ご教授お願い致します。

print "Content-type: text/html\n\n";
↑たとえばこういうのだとまったく問題ないです。(当たり前ですが)

print "<!--[if IE 6]>\n";
print "<![endif]-->\n";
↑こういうのがうまくいきません。
多分!や--が悪いと思うのですが・・・
どうすれば<!--[if IE 6]>をprint出来るのでしょうか?

ものすごく初歩的なことだと思うのですが、
検索しても全然それらしいものが出なかったので
どなたかご回答をお願い致します。
0493nobodyさん2009/09/30(水) 18:06:33ID:i3D4XUwa
<!-- hoge -->
が正しい。うしろにも前にも--
0494nobodyさん2009/09/30(水) 18:13:40ID:???
>>492
>>493は何か勘違いしてるのでスルーするとして
コメントだから単にブラウザ表示されてないだけ
ブラウザのHTMLソースを見ればちゃんと出力されてるよ
あとPHPはWebアプリケーション専用に開発されてるのでPerlのように
print "Content-type: text/html\n\n";
みたいのは不要
04954942009/09/30(水) 18:21:21ID:???
ちなみにそのタグの意味を説明するために単に文字列として出力したいというのなら
HTMLで<>を実体参照に置き換えるのと同じ要領でやればいい
0496nobodyさん2009/09/30(水) 18:23:38ID:???
>>492
PHPはデフォルトでHTMLとして出力するのでContent-typeとかは書かなくていい。
これを拡張子phpで保存して動かしてみるといい
--
<h1>
<?php
echo "Hello world";
?>
</h1>
--
明示的にContent-typeを変えたい場合は
header('Content-Type: text/plain');
こんな感じで。
0497nobodyさん2009/09/30(水) 18:35:31ID:???
>>487
|なんて使うのはおかしいだろ
0498nobodyさん2009/09/30(水) 18:56:32ID:???
|をデリミタに使うなら
(a-z|0-9)こういうパターンの時に困るだろ
0499nobodyさん2009/09/30(水) 19:04:05ID:2VTuEGW2
>>494
迅速な回答ありがとうございます。
ブラウザ上で表示されていないのは分かるのですが、
internal server errorがでるのでソースを見ることすら出来なかったのです。

あとprint "Content-type: text/html\n\n"; は不要とのアドバイス
ありがとうございます。

文字列として出力するのもやりたかったので
ご回答嬉しいです。ありがとうございます!
とりあえず実態参照って何か分からないのでググってみます。
ご回答ありがとうございました!

>>496
こちらも迅速な回答ありがとうございます。
今編集しているのは、拡張子が.cgiというファイルです。
0500nobodyさん2009/09/30(水) 19:17:00ID:???
PHPじゃない悪寒
0501nobodyさん2009/09/30(水) 19:29:41ID:???
>>499
phpをApacheモジュールとして動かしてるのではなくてCGIとして動かしてるのか
0502nobodyさん2009/09/30(水) 19:37:46ID:???
環境ないから答えられないがやっぱりCGIとなると!が誤解釈されてるんだろうな
0503nobodyさん2009/09/30(水) 21:46:51ID:AbgTvS5i
【OS名】winXP
【PHPのバージョン】xampp-win32-1.7.2に入っているバージョンで多分最新だと思います。
【連携ソフトウェア】なし。
【質問内容】
http://www.navit-tokubai.jp/tenpo.asp?ShopID=1658
ここにアクセスして、『ピーコック』『目白店』のみの文字列を抽出し表示させるソースを教えて下さい。
よろしくお願いします。
05045032009/09/30(水) 21:51:27ID:AbgTvS5i
<?php
$url = "http://www.navit-tokubai.jp/tenpo.asp?ShopID=1658";
$thread = file_get_contents($url);
mb_ereg("会社名</td>\r\n <td width=\"70%\" class=\"tenpo003\">\r\n (\W)", $thread, $matches);
print_r($matches);

ここまで、自分でやったんですけど、うまくいかないんです。
0505nobodyさん2009/09/30(水) 21:57:14ID:???
まず$threadの中に目的のソースを取得できたのか確認した?
05065032009/09/30(水) 22:37:15ID:AbgTvS5i
>>505
はい。 それは↓の実験で確認出来てます。
問題は、正規表現とか検索の関数の使い方がわかんないんです。

<?php
$url = "http://www.navit-tokubai.jp/tenpo.asp?ShopID=1658";
$thread = file_get_contents($url); // スレッドの全読み込み
$fp = @fopen("保存.txt", "w");
fwrite($fp, $thread);
fclose($fp);
0507nobodyさん2009/09/30(水) 22:41:00ID:???
>>503
正規表現で1発で抜き出せるとは思うけど自分は苦手なのでこれが精一杯

$list = file("http://www.navit-tokubai.jp/tenpo.asp?ShopID=1658");
$a = array();
for ($i = 0; $i < count($list); $i++) {
 if (preg_match("/<td.*会社名.*?<\/td>/", $list[$i])) {
  $a[] = trim($list[$i + 2]);
  continue;
 }
 if (preg_match("/<td.*店舗名.*?<\/td>/", $list[$i])) {
  $a[] = trim($list[$i + 2]);
  break;
 }
}
print_r($a);
0508nobodyさん2009/09/30(水) 22:44:07ID:???
<?php
$url = "http://www.navit-tokubai.jp/tenpo.asp?ShopID=1658";
$thread = file($url);
echo $thread[41];
echo $thread[48];
■ このスレッドは過去ログ倉庫に格納されています