【PHP】質問スレッドpart16【php】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/04/07 01:06ID:HTcWOpWf上級者用や雑談スレを立てたくなった場合は後から適宜立ててください。
■本家
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-5
0201nobodyさん
04/04/14 13:08ID:kCgzRk8J前の方の文字列を取り出す方法を御伝授ください。
具体的に
あいうえお<br>かきくけこ<br>さしすせそ<br>たちつてと<br>・・・・
の文字列から
3回目の<br>の前まで
あいうえお<br>かきくけこ<br>さしすせそ
を、取り出す方法です。
お願いいたします。 (o*。_。)oペコッ
0202nobodyさん
04/04/14 13:33ID:???$a="あいうえお<br>かきくけこ<br>さしすせそ<br>たちつてと<br>・・・・";
$b=explode("<br>",$a,3+1);
array_pop($b);
echo implode("<br>",$b);
0203nobodyさん
04/04/14 14:06ID:kCgzRk8Jすばやい御回答、ありがとうございました。
感謝です
m(_ _"m)ペコリ
0204nobodyさん
04/04/14 14:50ID:???スクリプト終了時にメモリは自動的に開放されるので、スクリプト中にそれほどメモリを消費していないのであれば、
unset() しない方がパフォーマンスは良かったような気がする。
未然にバグを防ぐために unset() するのは安全なのでいいことだと思うけど。
メモリに関しては、PHP を --enable-memory-limit オプション付きでコンパイルしていれば、 memory_get_usage() を
使って調べるのが確実。
0205nobodyさん
04/04/14 16:11ID:???Webアプリケーション等の場合にはスクリプト実行中にやるよりも、
終了時に自動でさせた場合、HTTPの出力は既に終わったあとの
処理となるので、ユーザにとって結果を受け取るまでの時間が
短いと言う意味でのパフォーマンスは良いが、スクリプト
パフォーマンスとしてはほぼ同等。分け隔てなく一切合財
開放するんで細かくみると若干良いけどね。
0206nobodyさん
04/04/14 16:29ID:rE+vE3GS0207nobodyさん
04/04/14 16:40ID:???0210nobodyさん
04/04/14 20:14ID:???<form action="ses1.php?<? echo strip_tags(SID)?>" method="post">
の echo って必要ですか?無くても動くようですが。
<form action="ses1.php?<? strip_tags(SID)?>" method="post">
にしてはいけないのでしょうか?
URL欄にIDが出てくるのはいやなんですが・・・
よろしくです。
0211nobodyさん
04/04/14 20:29ID:???下のPHPタグには何の意味が?w
さておき、4.2.0以降か、それ以前でtrans-sidが有効になっていれば、必要ないです。
0212nobodyさん
04/04/14 20:51ID:???<?
session_start();
?>
<form action="ses1.php" method="post"> ← .phpの後に何も付けない
どの参考書を見ても
<form action=“ses1.php?<?=SID?>” method=“post”>
とか
<form action="ses1.php?<? echo (strip_tags(SID))?>" method="post">
と書かれているので・・・
PHP4.3.2なのでいらないんでしょうね・・・
0213nobodyさん
04/04/15 01:28ID:???0214nobodyさん
04/04/15 01:49ID:pZEIIwSWブラウザーからのデータの取得は$_POST["message"]などを使うと思います。
でもこれってv4.1.0以降じゃないと使えないですよね?
v4.0.6の場合どうやって取得します?
register_globalsはOffのことも考慮して
$messageは使えないとしてお聞きします。
0216214
04/04/15 02:35ID:???レスサンクス。
あー、アホや自分。
マニュアルは「キーワード」で$_POSTを探していた。
「検索」で探したら一発で出てきた。
$HTTP_POST_VARS['message']
しかも$HTTP_SERVER_VARS['SCRIPT_URI']使っていたから気づけよ(´・ω・`)
0217nobodyさん
04/04/15 03:47ID:???function foo($a){ 【処理】 }
$a = array('x1'=>'x2','y1'=>'y2','z1'=>'z2');
foo($a);
は、参照渡し?
0218nobodyさん
04/04/15 03:59ID:e3RhHgHW0219nobodyさん
04/04/15 04:15ID:???なんかわかりずらいな…さんくすこ。
0220nobodyさん
04/04/15 04:23ID:e3RhHgHW0221nobodyさん
04/04/15 10:03ID:???IMAP関数って Windows では使えないんでしょうか?
0223nobodyさん
04/04/15 10:24ID:NQbEU4pX教えてなさい。お願いします。
0224nobodyさん
04/04/15 10:27ID:???参考になれば・・・
http://www.google.com/search?num=50&hl=ja&ie=Shift_JIS&c2coff=1&q=%83J%81%5B%83g%83%89%83b%83Z%83%8B&btnG=Google+%8C%9F%8D%F5&lr=lang_ja
0225nobodyさん
04/04/15 10:57ID:NQbEU4pXグッジョブ!
_| ̄|○ ガク
0227nobodyさん
04/04/15 11:30ID:+OQgNtC5参照渡しをしたければ
function foo(&$a) {}
にしたほうが将来的にはいいみたいだ
0228nobodyさん
04/04/15 15:20ID:???for ($i=0;$i<$hensuu;$i++){
echo "<select name=test[$i]>\n";
while($row = mysql_fetch_array($res)){
echo "<option value='$row[name]'>".$row["name"]."\n";
}
echo "</select>\n";
んで↓試してみたけどだめでした。
for ($i=0;$i<$hensuu;$i++){
$test[$i] = $HTTP_POST_VARS["test[$i]"];
}
どなたか識者の方お教え下さい
0229nobodyさん
04/04/15 15:38ID:???0231nobodyさん
04/04/15 16:03ID:???そのまま表示させると text/html 以前なのでソースが表示されてしまいます。
なので
$debug = '';
などで出力を配列の中身を入れてから出力させているのですが、
そうすると配列の中身が改行されないで表示されてしまいます。
みなさんはどのようにしているのでしょうか?
googleやマニュアルを2,3時間調べてみましたがわかりませんでした。
function debug などでprint_rしている例や、
$debug .= var_export($str);
などやってみましたが、うまくいきません。
デバッグの説明ページなどにも書いてないです。
PHPの本も3冊位みましたが出ていません...
英語のURLなどでもよいので、何か手がかりを教えて頂ければと思います。
0232nobodyさん
04/04/15 16:23ID:???ごめん、俺頭悪いんで、あなたの状況がいまいちわからん。。。
>text/html 以前なのでソースが表示されてしまいます
ってどういう状態?
>そうすると配列の中身が改行されないで表示されてしまいます
print_rの出力で改行されないって話?
それはブラウザがHTML的にレンダリングしてるからじゃないの?
ソースを見るか、print_rの出力前後に<pre>タグいれるかしたら解決しない?
なんせ理解しきれてないので見当違いなら悪かった。
0233nobodyさん
04/04/15 16:36ID:???説明不足ですみません...
>> text/html以前
というのは、ヘッダーを出す前ということです。
Content-Type : text/html\n\n
を出す前に print_rするとhtmlがソースで出てしまうので、変数にデバッグ情報を格納して
HTMLの中で表示したいという意味です。
print_rみたいなのの内容を変数にいれて、<pre></pre>で囲ってもなぜか、ちゃんと
改行されないのです。
print_rやvar_dump()の結果など変数に入れられないので困っています。
やりたいことは、ただ変数や配列の中身を調べたいだけなのですが...
0234nobodyさん
04/04/15 17:00ID:???>$debug .= var_export($str);
多分、var_export()の第2引数のところをよく読めば解決。
http://www.php.net/manual/ja/function.var-export.php
あとは出力バッファリングを制御して、var_dump使う手もある。
0235nobodyさん
04/04/15 17:03ID:???ただこれはphpinfo自身もヘッダー出力するのでダブって出ちゃうけど、
ブラウザが宜しく表示してくれるので、簡易的には使える。
0236nobodyさん
04/04/15 17:31ID:???$debug .= var_export($str, TRUE);
にしてみました。うまくいってないようです。
引き続き調べてみます。
>>235
> phpinfoに引数与えて、変数のあたりの項だけ出力つうのもあるな。
そんな方法もあるのですね試してみます。
preで表示されない件は、どうやら以下のように指定することで解決したような
感じです。xhtmlとかcssの新しいので仕様が変わったんでしょうか...
<pre style="white-space: pre">
0237nobodyさん
04/04/15 17:36ID:???ふたば(レッツPHP)の画像うpろだに、
携帯からアクセスるることは出来ないのでしょうか?
0239nobodyさん
04/04/15 17:45ID:???0241nobodyさん
04/04/15 18:04ID:???その人にきくのがスジってもんだろ
0242236
04/04/15 18:49ID:???調べたい配列を Debug($array); しているのですが、グローバルで指定してるはずの
$debug_output に何も表示されません。
少なくとも
マニュアルなど見てもこれでOKなはずで、何が悪いのかさっぱりわからないのですが...
どんな原因が考えられるのでしょうか?
少なくとも function Debug called: と表示されなくてはいけないはずなのに
function Debug($tmp)
{
global $debug_output;
$debug_output .= "function Debug called:\n";
$debug_output .= var_export($tmp, TRUE);
}
0243236
04/04/15 18:58ID:???Debug($array); を読んでいる関数の中で global $debug_output;
していなかったためでした...
うぅ、むずかしぃ。
お騒がせしてすみません。
0244nobodyさん
04/04/15 19:03ID:???ついでに。
上手くいったら判ると思うけど、var_dumpの出力と
var_exportの出力とは同じものではないので、
さっきも書いたけどvar_dumpの出力をバッファリングして
処理するつうのも試したら良いよ。
<?php
ob_start();
$ary = array(1,2,3);
var_dump($ary);
$dump = ob_get_contents();
ob_end_clean();
?>
<html><head><title>TEST</title></head>
<body><?php echo $dump; ?></body></html>
0245nobodyさん
04/04/15 22:41ID:???グーグルとかの検索エンジンにはひっかからないですよね?index.phpみたいなの。
でも静的なhtml内に部分的に埋め込んだ場合は、
PHPによる置き換え箇所の文字列も検索にちゃんとひっかかるんでしょうか?
簡単な日記更新用のスクリプト書いて、自動でログを読み込ませようとしてるんですが、
検索にひっかからないようなら、.htmlの完全に静的なファイルを、更新するたびに毎回書きださなきゃと思って。
cgiなら少しはさわったことあるけど、phpはこれからはじめようと思って…。
よろしくおねがいします。
0246nobodyさん
04/04/15 23:11ID:???プログラマならもう少し論理的に考えてみましょう。
htmlファイル、HTMLにPHPを埋め込むタイプ、PHPでHTMLを出力するタイプ。
検索エンジンがこれらのファイルを呼び出すと、HTTPヘッダ部分・ボディ部分が返ってくるわけです。
ボディ部分は出力のタイプによって変化しているわけじゃないのはすぐ分かると思います。
となると、違いがあるとすればヘッダ部分だけになります。
ところが、header()関数というものが存在し、これを用いてヘッダ部分をも統一することができるわけです。
困ったことになりました。>>245さんの質問の前提とも言うべき事が破綻してしまったのです。
いや、まぁグーグルだけを気にするならHELPにそのまんまの答えが書いてあるわけだが。
0247nobodyさん
04/04/15 23:36ID:???>PHPでhtml部分全部表示させた完全に動的なページって、
>グーグルとかの検索エンジンにはひっかからないですよね?
そんなことはないよ。まあロボットの中には拡張子で
動的コンテンツだと思われるものを除いて収集する、
性能の余り良くないものもあったけど。
>でも静的なhtml内に部分的に埋め込んだ場合
ここで前述のコンテンツの作りと「違う場合」と思ってるのは間違った理解。
0248nobodyさん
04/04/15 23:48ID:???プログラマじゃないです、只の素人です。
なのでheader()関数云々などよくわかりませんでしたが、
書き込みを見て色々と検索で調べてみました。
結果、
http://www.sem-research.jp/sem/seo/20030926003954.html
ここなどを見ると僕が思ってたほどの問題はないですねー。
urlに引数を付けないトップページだけ検索にかかればいいし。
どうもありがとうございます。
0250nobodyさん
04/04/16 04:57ID:52nqSZp9眠くて頭が働きません。。。
だれか
http://www.aaa.co.jp/bbb/ccc/ddd/eee
から、www.aaa.co.jp/bbb/ccc/ddd
を、取り出す方法を伝授してださい。
つまらない質問ですみません。
0252nobodyさん
04/04/16 05:07ID:52nqSZp9と、あれやこれやで、夜が明けちゃいました。(*ノ-;*)エーン
0253nobodyさん
04/04/16 07:14ID:???その書き込みだけじゃ、いまいち抽出条件がわからんが、たぶん、
$a="http://www.aaa.co.jp/bbb/ccc/ddd/eee";
ereg('^http://(.*)/[^/]*$',$a,$r);
echo $r[1];
かな。
0255nobodyさん
04/04/16 08:54ID:???ワロタ
0256nobodyさん
04/04/16 11:51ID:???0257nobodyさん
04/04/16 13:08ID:???0259nobodyさん
04/04/16 14:25ID:7NgfJvTRこういう関数もある
<?
$url = "http://www.aaa.co.jp/bbb/ccc/ddd/eee";
$parse_url = parse_url($url);
$dir_name = $parse_url[host].dirname($parse_url[path]);
echo $dir_name;
?>
0261nobodyさん
04/04/16 14:33ID:???くらいにインターフェースがスマート&簡素化されていないPHPが悪いんですよ!
0263nobodyさん
04/04/16 16:40ID:???0265nobodyさん
04/04/16 20:49ID:???NPO広場
http://www.npo-hiroba.or.jp/cgi-bin/nposearch/npo_top.cgi
ここの検索結果の団体詳細を
全てローカルに落とすことは出来ませんでしょうか?
アンケート調査を行いたいのですが、
ここから手動でデータを落としていると
それだけで膨大な時間がかかるので。
わかる方いたら教えて下さい
0266265
04/04/16 21:22ID:???urlのid=の所を指定したら出来ました
自己解決です
0267250
04/04/16 23:11ID:???いま、戻りました。
あの後、置き換える関数やら、最後の位置を取る関数やらを使って一応出来て
そのまま、寝ちゃいました。
教えていただいた関数も方がスマートなので使わせていただきます。
もう寝ます。(ゝ_ξ) ゴシゴシ
0269nobodyさん
04/04/17 20:15ID:???の、patternとして、「辞書配列hoge」の「要素hage」を使いたいのですが、
どういった記述をすればよいのでしょうか?
0270269
04/04/17 20:22ID:???preg_match ("/".$hoge['hage']."/",$subject)
であっけなくできたわ。
0271nobodyさん
04/04/17 21:30ID:???require "setting.inc";
echo "ようこそ";
みたいな感じでで共通で使う変数を羅列した設定ファイル(setting.inc)を読み込もうとしているのですが…
setting.incの中身が全部そのままブラウザに吐きだされてしまいます…
$data_dir="/data/"; $imagefile="img/";ようこそ
↑こんな感じ
こんなはずではなかったのですが…
どうすればよいのでしょう…
0272nobodyさん
04/04/17 21:56ID:???includeされるファイルも、ちゃんとPHPスクリプトにしてるかい。
要は<?php ?>で囲んどるか?
# おっちゃん、短縮形は好かんぞ
0273269
04/04/17 22:22ID:???PHPでWEBメーラーを作ろうと目論んでいるのですが、
メールの受信処理を行うには、どうすればよいのでしょうか?
0274nobodyさん
04/04/17 22:26ID:jFDbaWFj0278nobodyさん
04/04/18 04:09ID:???うまくできません。
下のコード、どこがおかしいんでしょうか?
$filename = 'test.txt';
if (!$handle = fopen($filename, 'w+')) { //←ここの条件分岐をスルーせずに
echo "Cannot open file ($filename)"; //ブラウザにコレが返ってくる。
return;
}
if (!fwrite($handle, "ほげ")) {
echo "Cannot write to file ($filename)";
return;
}
fclose($handle);
0279nobodyさん
04/04/18 04:30ID:???何らかの要因でtext.txtが新規作成できない。
ディレクトリのパーミッションとかそんな感じ。
PHPの動作モードとか、どういった権限のユーザで
動いてるのか等も関係するけど、その辺は環境毎に
違うので管理者に訊くなりして、自分で調べてね。
0280nobodyさん
04/04/18 12:48ID:???ポート番号を取得する関数とかないんですか?
0282280
04/04/18 13:32ID:???説明下手ですいません。
httpデーモンが動いているポート番号(80など)を取得したいのです。
自分の環境が80では無く、可変なので。
0284nobodyさん
04/04/18 13:40ID:???$_SERVER["SERVER_PORT"]
ちゃうの?
0286nobodyさん
04/04/18 13:53ID:???複合化できるのは無しでお願いします。
md5って
$pass="a8o4hn&$NKJnhsu5";
$md5_pass=md5($pass);
こんなので出来るんですか?
0287nobodyさん
04/04/18 13:53ID:1szp522M自宅鯖でPHPとMysqlを使っています。
下記のように書いたのですが、13行目でエラーが出てしまいます。
やろうとしていることはテーブルにあるデータを読み出して、カウントした数字を出したいのですが、
一体どうすれば・・・・
<html> //一行目
<head>
<title>test</title>
</head>
<body>
<table border="1">
<tr><td>ID</td><td>名前</td><?php
$con=mysql_connect("localhost","root","root");
mysql_select_db("kisop",$con);
$sql="SELECT * FROM test_table LIMIT 10";
$cnt="SELECT COUNT * FROM test_table";
$cnt1=mysql_query($cnt,$con);
print("データ件数は".$cnt1"件です"); //13行目
$res=mysql_query($sql,$con);
while($row=mysql_fetch_array($res)){
print("<tr>");
print("<td>".$row["id"]."</td>");
print("<td>".$row["name"]."</td>");
print("</td>");
}
?>
</table>
</body>
</html>
0288nobodyさん
04/04/18 13:54ID:???↓
print("データ件数は".$cnt1."件です");
凡ミスですな
0289280
04/04/18 14:03ID:???$_SERVER["SERVER_PORT"]で上手くいきました。
// マニュアル読まないといけませんね。
0290nobodyさん
04/04/18 14:04ID:1szp522Mエラーはでなくなったんですが
データ件数は件です と表示され、数字が出てきません・・・
こっ、これは一体なぜでありましょうか?
0291nobodyさん
04/04/18 14:22ID:???ありがとうございます。
ディレクトリのパーミッション違いで解決しました。
ただ、もうひとつ問題がわき上がって、
fopenで開く時の$filenameが
$filename="/test.txt";
とか
$filename="http://hoge.com";
などの絶対パスだった場合はオープン出来ないんですけども、
これは鯖にインスコされてるphpの設定ファイルに基づいた仕様ですか?
うちはレンタル鯖なのでもしそうなら諦めた方がよさそうですが。
0292278=291
04/04/18 14:23ID:???0293278=291
04/04/18 14:26ID:???×
$filename="/test.txt";
とか
$filename="http://hoge.com";
↓
○
$filename="/test.txt";
とか
$filename="http://hoge.com/test.txt"; //←
0295nobodyさん
04/04/18 14:47ID:???具体的には
<?xml version="1.0" encoding="UTF-8"?>
<test>
<hoge>geho</hoge>
<foo>bar</foo>
</test>
$test[hoge] = "geho";
$test[foo] = "bar";
みたいな感じにしたいんですが…。
0296nobodyさん
04/04/18 14:49ID:???0297nobodyさん
04/04/18 14:53ID:???open_basedirディレクティブで範囲を制限してると思われ。
http://www.php.net/manual/ja/features.safe-mode.php
前の動かないってやつもそうだけど、ちゃんとエラーが
出力されているので、レポーティングレベルきつくして
ちゃんと見れ。特にPHPに慣れてない場合は。
http://www.php.net/manual/ja/function.error-reporting.php
http://www.php.net/manual/ja/security.errors.php
(下はデバッグと運用時とでは、エラー出力の考え方が違うよという説明)
0299nobodyさん
04/04/18 14:58ID:???mysql_query()は、クエリーが成功したかどうかを 表すために
TRUE(非ゼロ)またはFALSEを返します。(マニュアルより)
>>291
> $filename="/test.txt";
パーミッション
>$filename="http://hoge.com/test.txt";
HTTPは書き込みのみ。ftp://ならうまくいくケースもある。
詳しくは、マニュアルの「サポートされるプロトコル/ラッパー」を参照のこと。
0300nobodyさん
04/04/18 15:00ID:???普通にリモートのファイルをテキストとして読んで、
そのテキストをxmlとしてパースして処理する。
xmlのパースについては何通りかあるので自分で調べてください。
# 標準のものは初めてだと使いづらいかな。PEARとかSimpleXMLを検討せよ。
■ このスレッドは過去ログ倉庫に格納されています