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

【PHP】ID出さなくても質問OKなスレ【初心者歓迎】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/02/03(火) 01:09:36ID:???
まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
0751nobodyさん2009/08/01(土) 23:44:33ID:FfAyQxIr
初心ですいません。今PHPで複数のサイトの更新情報を表示できるrssをつくりたくて
やっと表示できたソースがあったんですが、↓のやりかただと更新時間順に表示されなくて、
URL順になってしまいます。
$rss = array('http://○○','http://○○','http://○○');

これ以上ぐぐっても答えが出そうにないのでお知恵をお貸しください
0752nobodyさん2009/08/01(土) 23:52:02ID:???
RSSを表示できるなら、その内容をパースすることもできるだろう。
パースして各RSSの更新日時を取得、それを順に並べて出力すりゃいい。
0753nobodyさん2009/08/02(日) 10:58:28ID:???
微妙にスレチなんだけど、このスレの凄腕達はPHP開発環境使ってる?
var_dumpでブラウザに毎回出力してたんだがさっき自称凄腕に失笑された
0754nobodyさん2009/08/02(日) 12:27:20ID:???
デバッグするならZendStudio、とりあえずさっと作って動作確認するなら秀丸+ブラウザorコマンドライン
0755nobodyさん2009/08/02(日) 12:28:46ID:???
>>753
つ FirePHP
0756nobodyさん2009/08/02(日) 15:17:53ID:???
var_dumpを笑う者はvar_dumpに泣く

じっちゃんがよく言ってた
0757nobodyさん2009/08/02(日) 15:24:41ID:???
俺なんてブラウザでprint_rですけど
0758nobodyさん2009/08/02(日) 16:16:05ID:???
フリーのIDEがZendFWに完全対応してくれるならいいんだけど・・・
0759nobodyさん2009/08/03(月) 09:48:18ID:???
リモートデバッグとかステップ実行したいときはPDTだけど
普段はPHPエディタ+tortoisesvn
デバッグ表示はVar_Dump::display(); // pearのVar_Dump

あとはXdebug有効にしてる(エラー時にブラウザに色々情報でる)
凄腕じゃないのでほとんどの場合、これで十分。
0760nobodyさん2009/08/05(水) 23:34:19ID:???
公式マニュアルのミスは何処に言えばいいんだ?

http://jp.php.net/manual/ja/function.min.php
>min() は配列の中で最も大きい数値を返します
0761nobodyさん2009/08/05(水) 23:39:36ID:???
>>760
ドキュメントの改善を手助けするには
ttp://jp.php.net/manual/ja/about.howtohelp.php

0762nobodyさん2009/08/06(木) 09:46:57ID:???
※ただしストレスが溜まる
0763nobodyさん2009/08/09(日) 02:42:18ID:???
PHPの総合開発環境で何かおすすめないですか?
PHPエディタという奴は起動してすぐ落ちるのでだめでした
VisualStudioみたいのがいいんだけど、やはりフリーじゃなくお金払わないとだめですかね
0764nobodyさん2009/08/09(日) 02:48:28ID:???
eclips + PDT
0765nobodyさん2009/08/09(日) 04:26:11ID:???
>>764
コード書いた後の出力の確認ってどんな感じになるの?
0766nobodyさん2009/08/10(月) 00:19:53ID:???
教えてください
CSVから1行一件のデータを読み込み
最初のforeachの中でif文使って条件分けしたデータを配列に入れて
その分けた数とforeachで表示させたいのですが
条件分けしたデータを入れる変数?配列?の宣言の仕方が分かりません
$Alllist = file("data.csv");
foreach( $Alllist as $list )
{
07677662009/08/10(月) 00:22:54ID:???
改行間違って送ってしまった orz
if( strcmp( $list, "A" ) == 0 )
$array = $list;
}
printf( "Count count($array)" );
foreach( $array as $wake )
{
07687662009/08/10(月) 00:25:21ID:???
最悪だ、2度失敗した
  表示;
}

すみません、質問以前な事してますが
よろしくお願いします m(_ _)m
0769nobodyさん2009/08/10(月) 00:30:52ID:???
strcmpで条件分けしたCSVの1行だけ
foreachで各列を表示したいんだよね?
それでいいのでは?
0770nobodyさん2009/08/10(月) 00:55:07ID:???
推測になるが、例えばcsvデータの1列目の文字に応じて、分類したいということなら、

function group_lists($list, $key, &$group) {
if (! array_key_exists($key, $group)) $group[$key] = array();

$group[$key][] = $list;
}

// ここから呼び出し元

$group = array();
foreach( $Alllist as $list )
{
if (stripos($list, 'A') === 0) {
group_lists($list, 'A', $group);
}
else if (stripos($list, 'B') === 0) {
group_lists($list, 'B', $group);
}
// 以下、場合分けの数だけelse ifが続く
}
0771nobodyさん2009/08/10(月) 01:16:15ID:???
submitボタンが押されたらフォームの内容を
ファイルに書き込むプログラムを作りました。

a.php
-----------------------------------------------------
if($_POST['submit']) {
writeData();
}
-----------------------------------------------------

これは正常に動いているのですが、
a.phpからb.htmlなどにページ移動し、ブラウザの戻るボタンで戻ると
再度POSTデータが送信されてファイルに書き込まれてしまいます。
これを避ける方法がありましたら、ご教授願えますか?
0772nobodyさん2009/08/10(月) 03:15:03ID:???
>>770
なんで===にしてんの?
0773nobodyさん2009/08/10(月) 03:15:45ID:???
>>771
Locationで飛ばすとか
0774nobodyさん2009/08/10(月) 06:26:50ID:???
>>771
書き込む内容をチェックしたり、セッション使ったり
用途に合わせた選択をすればいいと思う
>>772
==を使う方が例外的だろう
普通は===を使うぞ
0775nobodyさん2009/08/10(月) 07:11:59ID:???
えっ
0776nobodyさん2009/08/10(月) 07:30:39ID:???
なにそれ
07777662009/08/10(月) 10:34:50ID:???
>>769 >>770さんレスありがとうございます
まずCSV内に一致した数を表示させて
その後に分類されたデータを表示させたいので
分類と表示を一緒にはできない・・・ですよね

配列を宣言して、その配列にどんどん分類したデータを追加していく
C++で言うvector見たいなのはphpでは無いのでしょうか?
0778nobodyさん2009/08/10(月) 10:39:06ID:???

hairetu = array();
hairetu[]="hogehoge";
hairetu[]="hagehage";
hairetu[]="tsurutsuru";
0779nobodyさん2009/08/10(月) 12:16:40ID:???
== は型を無視して比較、
=== は型まで同一かどうかを比較、
だったっけか
07807662009/08/10(月) 13:47:28ID:???
>>778
ありがとうございます、うまくいきました

>>779
知らなかったー
0781nobodyさん2009/08/10(月) 14:09:08ID:???
>>774
普通は===を使うぞの根拠をkwsk
0782nobodyさん2009/08/10(月) 15:46:06ID:???
>>781
http://d.hatena.ne.jp/hnw/20080606
この記事がとても参考になると思う
0783nobodyさん2009/08/10(月) 15:51:30ID:???
>>782
全部マニュアルで明記されてることじゃん??
どの辺が普通なの?
0784nobodyさん2009/08/10(月) 15:58:42ID:???
粘着質な奴だな
0785nobodyさん2009/08/10(月) 17:08:21ID:???
答えられないんだw
0786nobodyさん2009/08/10(月) 17:24:39ID:???
テキストファイルからURLを抽出するphpを書きたいのですが、

$source (元のテキストファイル)
$result (URLリスト)
とします。

http://phpspot.net/php/man/php/function.preg-match-all.html
ここを参考に以下のコードを書きました。

// $pattern = '/http:\/\/[a-z0-9\/\-_\.]+/i';
// $pattern = '/(?:")?(http:\/\/[^\s"]+)/';
$pattern = '/^(https?|ftp)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)$/';

preg_match_all( $pattern, $source, $maches );
fputs($pointer, count($matches[0]));
fputs($pointer, "\n");

for ( $i=0; $i< count($matches[0]); $i++ )
{
fputs($pointer, $maches[1][$i]);
}

色々パターンを変えてやってみても、結果はいつも0(何もマッチしない)です。
これ以外の方法でも構わないので、テキストからURLリストを作る方法を教えてください。
よろしくお願いします。
0787nobodyさん2009/08/10(月) 18:31:55ID:???
>>782
string型同士でも10e0とか数字比較されるのは知らなかった。
これは危険だな。
0788nobodyさん2009/08/10(月) 20:09:42ID:???
>>786
ひょっとして
$source = 'hoge.txt';
とかじゃないよね?
preg_match_allの第2引数は検索対象となる”文字列”だからね?
0789nobodyさん2009/08/10(月) 20:11:45ID:???
型まできちんと意識するときは===使うけど、意識するまでもないときは普通に==使うなあ。
まあ用心とか念のためとかいわれたらそう言う考え方もあるよね、だけど。
0790nobodyさん2009/08/10(月) 20:17:14ID:???
型を意識しなくてもいい言語だからこそ型に関連するバグに嵌るんだよな
07917702009/08/11(火) 00:47:34ID:???
>>772

いまさらだが、striposは、見つからなかった場合、falseを返す。
== 0 とした場合、0文字目かfalseかを判断出来ないため、=== 0とした。
07927862009/08/11(火) 11:34:24ID:???
>>788
そうやってました。
っていうことは、$sourceから一行づつ文字列引っ張ってpreg_matchでチェックしていくんですかね。
どう書けばいいんだ… CかC++なら一瞬で終わるのに…
07937862009/08/11(火) 11:37:04ID:???
おそらく$sourceから fgetsでラインを取りだすと思うんですが、行はどうやって指定するんですか?
(ポインタをどうやって進めるんですか?)
0794nobodyさん2009/08/11(火) 11:45:01ID:???
$source = 'hoge.txt';
$pattern = '/(https?|ftp)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/mi';
preg_match_all( $pattern, file_get_contents($source), $maches );
print_r($maches);
07957862009/08/11(火) 11:46:06ID:???
<?php
 $pointer=fopen("./book/memo", "r");    //ファイルを開きます
   $line = fgets($pointer);       //内容を取り出します
  echo $line;               //画面に内容を表示
 fclose($pointer);              //ファイルを閉じます
?>

こういうクソサンプル載せてるサイトってなんなんだろう…
全く意味がないw
07967862009/08/11(火) 11:48:25ID:???
>>794さん
ありがとうございます。
file_get_contentsがキモだったんですね。
0797nobodyさん2009/08/11(火) 11:48:48ID:???
お前が言うな
0798nobodyさん2009/08/11(火) 12:29:46ID:???
ワロタ
0799nobodyさん2009/08/12(水) 11:34:05ID:???
Apache で聞くべきか悩んだのですがここで。
.htaccess で

php_value mbstring.func_overload 0


と書いても設定が変わりません。試しに

php_value mbstring.func_overload = 0


と書くとエラーになるので .htaccess は読まれているようです。
( mod_rewrite などは動いている )

解決策をご存知の方はいらっしゃいませんか。
0800nobodyさん2009/08/12(水) 11:41:53ID:???
ini_get("mbstring.func_overload"); はいくつ?
08017992009/08/12(水) 11:54:07ID:???
>>800
7 なので 0 にしたくて
0802nobodyさん2009/08/12(水) 13:46:11ID:???
>>801
だからよ、7ってことはその.htaccessが効いてないってことじゃないか。
08037992009/08/12(水) 13:47:48ID:???
>>802
なので何でだろう、と。
Apache スレの方がいいですかね。
0804nobodyさん2009/08/12(水) 14:04:17ID:???
ini_set してまたini_getするとどうなる?
0805nobodyさん2009/08/12(水) 14:05:09ID:???
AllowOverrideがNoneになってるとか?
0806nobodyさん2009/08/12(水) 14:05:24ID:???
そもそも環境は?バージョンとか。
一部レンタルサーバじゃその変更使えないとか書いてるサイトもみかけたぞ
08077992009/08/12(水) 14:44:31ID:???
みなさん、いろいろとありがとうございます。

>>804
mbstring.func_overload は PHP_INI_PERDIR なので
ini_set() できないだろと思いつつ、試してみましたが 7 のままです。

>>805
あ、それ怪しい、と期待したのですが
AllowOverride All
Options All
でした…。

>>806
自分のパソコンの実験サーバです。
Apache/2.0.63 + PHP 5.2.9-1 ( Windows Vista )

とりあえず php.ini の mbstring.func_overload = 0 をしてますが、
古いアプリが 7 を期待しているのがあって、普段は 7 がいいんです…。
0808nobodyさん2009/08/12(水) 15:16:49ID:???
いやまあAllowOverrideはrewrite効いてるって書いてるから無いでしょ。
とりあえずこっちで試す限り普通に変更できるので、どこかで上書きしてるか
変更しないようになってるのでは。
インストールした直後の設定に戻しても同じかな
08097992009/08/12(水) 15:37:31ID:???
>>808
ですよね。
何かの見落としだと思うので
クリーンな環境で試してみます。
0810nobodyさん2009/08/12(水) 21:21:14ID:???
今日初めてSmartyを使ってみたのですが、ブラウザで開くと文字化けしてしまいます。
phpとtplの文字コードはEUC-JPで、tplの出だしは
<HTML lang="ja">
<HEAD>
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=EUC-JP">
となっています。
そいやphpで書いてた時も同じものをprintしたんじゃだめで、
header( "Content-Type: text/html;charset=EUC-JP" );
と書かないと文字化けしたんですけど、関係あるでしょうか?どうやって解決すればいいんでしょう。
0811nobodyさん2009/08/12(水) 21:23:16ID:???
続き
mbstring.internal_encoding = EUC-JP
になっています。
0812nobodyさん2009/08/12(水) 21:27:49ID:???
更に追記
ブラウザでエンコーディングを日本語:EUC-JPに指定すると文字化けが直ります
日本語:自動判別にすると文字化けします
0813nobodyさん2009/08/12(水) 21:56:23ID:???
冒頭に美乳と書く
0814nobodyさん2009/08/12(水) 22:01:02ID:???
>>810
ブラウザに送られるHTTPヘッダの情報に異なった文字コード宣言が入っているため
FirefoxはHTTPヘッダとHTML文書に異なる文字コードが宣言されている場合、HTTPヘッダを優先する
header()はHTTPヘッダを送信する関数のため、header()を利用した場合は再現しない
0815nobodyさん2009/08/13(木) 01:01:40ID:???
なるほど。で、どうすればいいんでしょうか
0816nobodyさん2009/08/13(木) 10:20:29ID:???
default_charset は?
0817nobodyさん2009/08/13(木) 21:55:45ID:???
php.iniの中にdefault_charsetの設定がありません。これが原因でしょうか?
バージョンによってはないものなんでしょうか?追加するとしたらどこにすればいいんでしょう。
ぐぐって出てくる解説では最初から入っていることが前提となってるっぽいですが。
0818nobodyさん2009/08/13(木) 21:59:48ID:???
適当な位置にdefault_charset = EUC-JPを追加してみたけどだめでした。
こりゃあきらめるしかないか。
0819nobodyさん2009/08/15(土) 14:05:38ID:???
mixiのメッセージが届いたら、
「○○さんから届いたよ」っていうメッセージが
デスクトップに表示されるっていうプログラムを作りたいんですが、
「メッセージを受け取った時に実行する」にはどうしたらいいんでしょう?

0820nobodyさん2009/08/15(土) 14:22:52ID:???
http://pc11.2ch.net/test/read.cgi/php/1167984858/l50
マルチ?
0821nobodyさん2009/08/17(月) 17:42:19ID:YF5t01fc
ハリコの虎とかがむしゃらのようなスクリプトって公開されていますでしょうか?
0822nobodyさん2009/08/17(月) 17:47:12ID:???
何だろうと思ったらエロ画像掲示板なのか
ぼく18歳未満なのでこれ以上調査できません><
0823nobodyさん2009/08/18(火) 10:55:27ID:4md56gGq
質問です。

<?php
$test="てすと";
?>
<html><body>
<?=$test?>
</body></html>

これが表示されるサーバーと表示されないサーバがあるのですが、
どういう理由で違いが出るのでしょうか?
どこかサーバー側の設定が違うのでしょうか?

宜しくお願いします。
0824nobodyさん2009/08/18(火) 10:58:12ID:???
>>823
short_open_tag
0825nobodyさん2009/08/18(火) 11:14:03ID:4md56gGq
>>824
ありがとうございました。
無事、表示できるようになりました。
0826nobodyさん2009/08/18(火) 15:33:36ID:???
ショートオープンタグは、
オフにしたほうがいい。

もし開発環境で、オンで、
そのまま開発して、
それでもし本番がオフだったら、
書いたコードがPHPとして
実行されずに、ソースが丸見えになる。
0827nobodyさん2009/08/18(火) 15:36:44ID:???
俺の、ゆめは、将来のうちに
連れとか中間と、いっしょに、連合組んで
関東を統一することである。
学校出たら、トオルんとこの溶接、手伝って
金ためてアストロか、シーマを、迷ってるが買って、
単車も改造して、バリバリいい音出して走る。
俺は、ずっと将来現役で、走り続ける事が、夢である。

これ思い出した
0828nobodyさん2009/08/18(火) 19:47:38ID:???
レンタ鯖がカスタマイズしたphp.iniの設置認めてるんですが、
こういう場合php.ini全文をupするものなのか、それとも変えたい部分だけを

log_errors = On

みたく書いてそれだけをphp.iniの名前でupするものなんでしょうか
0829nobodyさん2009/08/18(火) 20:10:14ID:???
>>828
レンタル鯖のマニュアル読んだほうがいい。
一概にどうとは言えないと思うよ。
0830nobodyさん2009/08/19(水) 13:19:33ID:rHPCm5Kh
すいません、質問いいですか?
【OS名】 linux
【PHPのバージョン】php5.1.6
【WEBサーバ】 Apache
【質問内容】
function send_to_smart($data1, $data2 ,$mode){
//パターン1
if($mode+0 == 0){
$request = "GET /aaaaa/?data1=".$data1."&data2=".$data2."HTTP/1.0\r\n\r\n";
send_request($request);
//パターン2
}elseif($mode+0 == 1){
$request = "GET /bbbbb/?data1=".$data1."&data2=".$data2."HTTP/1.0\r\n\r\n";
send_request($request);
}
$fp = fsockopen("*****.jp",80);
fputs($fp, $request);
while (!feof($fp)) {
$line .= fgets ($fp,128)."\n";
}
fclose ($fp);
}
上記の感じでソケット送信のプログラムを作ってます。
・パターン1と2で別々にデータを送信してる
・2回とも情報送ってるはずなのに、受け取り側ではパターン1しか受け取れてない。
・パターン2はデータが入っていないのではなく、リクエスト自体が来ていない。
・2回ともレスポンスは取れている。ソケットオープンも問題なし。

パターン2で送れない理由がさっぱりわかりません。
これで、なんか原因や解決策判ったりしますか?
0831nobodyさん2009/08/19(水) 13:22:35ID:???
send_request関数が無いので何とも
0832nobodyさん2009/08/19(水) 13:24:22ID:???
マルチだったのか。乙
0833nobodyさん2009/08/19(水) 14:29:22ID:???
<?php
$mes ="
<html>
<head><title>aaa</title></head>
<body>aaa</body></html>";

echo $mes;
?>


たったこれだけのスクリプトがFirefoxでだけエラー起こす鯖があるんだけどなんでだろう
アドオンは当然全部切った

↓エラーメッセージ
501 Method Not Implemented
GET to /test.php not supported.
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
0834nobodyさん2009/08/19(水) 14:36:00ID:???
正しくヘッダ出してないからじゃね
0835nobodyさん2009/08/19(水) 14:38:06ID:???
クッキー消せだって
0836nobodyさん2009/08/19(水) 14:57:27ID:???
ありがとう
クッキー消したらうまくいった
クッキーなんて使ってないスクリプトなのになんでだろ・・・
0837nobodyさん2009/08/20(木) 01:28:48ID:???
file_get_contentsとか、curl_execとかでPOST送信した場合、
相手から302が返ってくると遷移先にGETで送ってくれやがります
POSTで再送できないの?
0838nobodyさん2009/08/20(木) 09:59:34ID:???
RFC2616
0839nobodyさん2009/08/20(木) 23:15:54ID:???
>>838
「POSTして302が返ってきたら遷移先にもPOSTで送れって書いてあるのに
誰も守ってくれなかったから仕方なく303と307作った」
って読めるんだが違うの?

その本来の302の動作をさせたかったんだが。
とりあえずZend_Httpのstrictredirectsでできるのはわかったんだが、できれば標準関数で行いたかった。
0840nobodyさん2009/08/21(金) 15:54:18ID:???
他人がつくったPHPアプリをメンテしているんですけど、スパゲッティになっています。
それで、どのPHPファイルが読み込まれるのかを調べたいんですけど、そのような機能はPHPにありますか。
つまり require_once() した時にそのファイル名をログファイルに出力させたりとか、そういうかんじの機能です。
よろしくお願いします。
0841nobodyさん2009/08/22(土) 03:08:28ID:???
>>840
・配列のぐろーばる変数をつくる
・あらゆるPHPファイルの戦闘でグローバル変数に自分のファイル名を追加させる
・最後辺りで print_r する
08427702009/08/22(土) 03:44:58ID:???
>>840
使ったこと無いけど、inclued_get_dataはどう?
マニュアル見た感じ、取得出来そうなきがする
http://jp.php.net/manual/ja/intro.inclued.php
0843nobodyさん2009/08/22(土) 12:27:40ID:???
>>841
全ファイルの先頭に追加するならそんなことしなくてもecho __FILE__すればいいだけじゃないのか・・・
0844nobodyさん2009/08/24(月) 00:53:18ID:???
画像への権限について質問があります。
画面からファイル(画像)がアップロードされた場合に
http://test/img/test.jpg
という風にファイルを保存しています。

また、ファイルがアップロードされたタイミングでファイルの権限を640に設定し
そのままでは外部からアクセス出来ない様に設定しています。

ここで質問なのですが、A.phpのページにパスワードを入力しそのパスワードが
正しい場合のみそのクライアントからは、アップロードされたファイル(ここでは、 test.jpg )に
アクセス出来る様にしたいのですが何か良い方法はありますか?
0845nobodyさん2009/08/24(月) 01:29:01ID:???
>>844
コード上の認証と絡めるなら、画像のURLをPHPにして、
パラメータでどの画像か判別させればいいのでは。

PHPからは、image なんちゃらの content-type ヘッダを
吐き出して、そのあとバイナリを送ればいいだけ。
0846nobodyさん2009/08/24(月) 01:40:50ID:???
>>845
ごめんなさい。ちょっと難しいです。
何か参考になるサイトがあれば教えて頂けますでしょうか?
0847nobodyさん2009/08/24(月) 06:22:07ID:???
マニュアルみながらBASIC認証なりセッションなりやればいいんじゃね
0848nobodyさん2009/08/25(火) 00:24:14ID:???
>>844
test.jpg を、ブラウザからはアクセスできないフォルダに置く。
(できないサーバーもある)

それで、phpから、そのjpgを呼び出して表示するように
すればよい。

1.phpにアクセスすると、
その1.phpが、test.jpgを呼び出す感じ。

直接test.jpgにブラウザからはアクセスできない。

それで、1.phpに、パスワード認証をかけておいて、
パスワードが一致したら、ログイン成功、にして、
セッションでその情報をもちまわせばよい。
0849nobodyさん2009/08/25(火) 14:05:57ID:???
オンラインチャットを作りたいのですが、一から言語を覚えて作るのは難易度高いでしょうか
プログラミングはvbとhtmlしか経験ありません
0850nobodyさん2009/08/25(火) 14:11:57ID:???
>>849
技術的にはCometとかになるだろうから
インフラ的に無理
自鯖使うならいいけど
難易度的には難しくはないしその辺にサンプルも転がってるだろう
■ このスレッドは過去ログ倉庫に格納されています