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

【PHP】ID出さんでも質問OKなスレ【初心者歓迎】2

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/09/10(木) 22:52:33ID:???
まず読む→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り

姉妹スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 80
http://pc11.2ch.net/test/read.cgi/php/1233479457/
0175nobodyさん2009/09/23(水) 16:37:42ID:???
例では$cに当たる部分がメソッドだから意味が違うよ
0176nobodyさん2009/09/23(水) 16:42:04ID:???
ex)
class myClass {
 function setValue( $set)
 {
 $foo = &PEAR::getStaticProperty('myClass', "foo");
 $foo = $set;
 }
 function view()
 {
  print PEAR::getStaticProperty('myClass', "foo");
 }
}
myClass::setValue('value = foo');
myClass::view();
0177nobodyさん2009/09/23(水) 17:36:20ID:???
>>175
あっ、ほんとですね
メソッドの場合は意味が違うのですか?
失礼ですが、意味の違いが分かりません

>>176
すみません、初心者なのでいまいち分からなかったのですが、文をそのまま実行したら、
3行目がParse error: syntax error, unexpected T_STRING, expecting T_FUNCTION in C:\Program Filesとなりました

>>176のコードは、まずmyClassというクラスを定義し、中身はsetValueとviewという2つの関数を内包
setValue関数はまずmyClassというクラスからfooという変数を取得、次にsetValue関数の引数$setを$fooに代入
view関数はそのままprint()
で、メソッド呼び出しという考えでいいのでしょうか?
('value = foo')は$setにfooを代入

で、上の方でも書いている問題点なのですが、自分がこうじゃないのかなぁと思ったのは、
$foo = &の文でコピーした変数fooと$foo = の下の文は独立して・・・ってアレ?
どっちとも同じ式に・・・???

ごめんなさい、やっぱ分かりません


0178nobodyさん2009/09/23(水) 18:05:26ID:???
エラーは全角スペースかな。


getStaticPropertyが返してるのは参照なので、 'myClass'と"foo"という文字列で参照できるようにした変数の参照を返してるんだと
思います。  実際どうなってるのかは知らないけど、たとえば
$foo = &$proparty["myClass"]["foo"];    みたいな感じで。
なので、 $foo = $set;  は
$proparty["myClass"]["foo"] = $set; をしてることになりますよね。
0179nobodyさん2009/09/23(水) 18:07:13ID:???
そうすることに何の意味があるの?
01801642009/09/23(水) 18:16:35ID:???
つまり、>>164の場合は、
$optionsという変数がオーバーライドされているわけではなく、
PEAR::getStaticProperty('DB_DataObject','options') = $config['DB_DataObject']
と代入しているという事でしょうか?
となると変数$optionsというものは意味が無く、形だけのものだという事なのでしょうか?
それがメソッド時の「&」の意味だと言うのならば分かります

>>176の例では
PEAR::getStaticProperty('myClass', "foo") = $setという意味で、PEAR::getStaticProperty('myClass', "foo")がオーバーライドされて消えたのではないと言う意味になるのですね



0181nobodyさん2009/09/23(水) 18:31:13ID:???
173が分かるなら、それ以上のことではないよ。難しく考えすぎじゃない?
0182nobodyさん2009/09/23(水) 18:39:17ID:???
一種の決まり文句とかおまじないのようなものと思っておけばいいと思う。

ソースのコメントに、
// おまじない
だの
// ↓消すと何故か動かなくなる
だのが書かれてるコードはたまに上がってくるしな。
0183nobodyさん2009/09/23(水) 20:53:59ID:???
PHPって曜日も把握してるの?


たとえば、
2009/09/23

って入れたら、

「その日は水曜日」

ってわかる?
0184nobodyさん2009/09/23(水) 21:03:36ID:???
umu
0185nobodyさん2009/09/23(水) 21:06:43ID:???
>>184
すごいね。
もしかして、2000年分くらい
全部記憶してるの?
0186nobodyさん2009/09/23(水) 21:08:23ID:???
umu
0187nobodyさん2009/09/23(水) 21:16:22ID:???
計算で出るだろ
0188nobodyさん2009/09/23(水) 22:18:05ID:???
strtotime() と date() だろ
0189nobodyさん2009/09/23(水) 23:05:30ID:???
arrayの内容を、
一個づつ取ってきて、
画面に表示する、
ってプログラム、
forとforeachではできたんだけど、
こんどwhileでやってみるかな?って思ったんだけど、
どうやって組むかな?
0190nobodyさん2009/09/23(水) 23:06:28ID:???
<?php

$banban[] = "HTML";
$banban[] = "XHTML";
$banban[] = "XML";
$banban[] = "CSS";


for($i=0;$i<=3;$i++){
print $banban[$i] . "<br>";
}
?>


-------------------------------------

↑これがforのバージョン。
0191nobodyさん2009/09/23(水) 23:07:15ID:???
<?php

$banban[] = "HTML";
$banban[] = "XHTML";
$banban[] = "XML";
$banban[] = "CSS";
$banban[] = "PHP";


foreach($banban as $aaa){
print $aaa;
print "<br>";

}


?>
------------------------------------------

↑これがforeachのバージョン。
0192nobodyさん2009/09/23(水) 23:14:21ID:???
君の見てるサイトの配列のページに書いてあるじゃないか
0193nobodyさん2009/09/23(水) 23:32:42ID:???
print_r じゃダメなの?????
0194nobodyさん2009/09/24(木) 00:18:42ID:???
>>190
<?php

$banban[] = "HTML";
$banban[] = "XHTML";
$banban[] = "XML";
$banban[] = "CSS";

for($i=0;$i<array_count_values($banban);$i++){
print $banban[$i] . "<br>";
}
?>
0195nobodyさん2009/09/24(木) 00:26:16ID:???
<?php

$banban[] = "HTML";
$banban[] = "XHTML";
$banban[] = "XML";
$banban[] = "CSS";

array_walk($banban, create_function( '$v','print $v."<br>";' ));
?>
0196nobodyさん2009/09/24(木) 00:37:53ID:???
reset($banban);
while ($val = each($banban)) {
print $val[1] . "<br>";
}
0197nobodyさん2009/09/24(木) 09:14:12ID:???
すみません、上の質問読ませて頂きました
読んでいて自分も疑問に思ったので調べてみたのですが、>>176のような『&』の事を何と呼ぶのでしょうか?
ネットで調べても、&だけでは色々とあって自分では辿り着きませんでした
何か、何とか演算子とか名前があると調べやすいと思ったものですから
0198nobodyさん2009/09/24(木) 09:32:16ID:???
リファレンス演算子
0199nobodyさん2009/09/24(木) 11:46:01ID:???
create_functionってあまり推奨されてないよね
0200nobodyさん2009/09/24(木) 11:47:06ID:???
そりゃ無名関数があるしな
0201nobodyさん2009/09/24(木) 12:17:44ID:???
リファレンス演算子 で出てこないッス・・・orz
0202nobodyさん2009/09/24(木) 12:19:14ID:???
http://gooddays1.blog37.fc2.com/blog-entry-110.html
あるじゃん
0203nobodyさん2009/09/24(木) 15:48:25ID:???
よく色んなサイト(例えばココ http://www.phpbook.jp/install/phpini/index2.html)
や本でphp.iniの中で、include_path=".;c:/php/includes;"とありますが、自分のPHPフォルダ内にはincludesというフォルダもファイルも存在していません
で、上記のようにphp.iniを設定していますが、意味が無いように思えます
コレは自分で勝手にincludesというフォルダを作ればいいのでしょうか?
それとも、その中に何か必要な(or重要な)ファイルとか入っているのでしょうか?
どうすればいいのでしょうか?
02042032009/09/24(木) 15:50:47ID:???
PHPのバージョンは5.210です
0205nobodyさん2009/09/24(木) 15:53:46ID:???
>>203
インクルードパスっていうのは、php本体ではなく、phpの拡張パーツが入るディレクトリの場所。
なので拡張パーツが特になければ、 include ディレクトリはなくていい。

必要になったら、設定ファイルのその箇所に書いたディレクトリを作ればいい。
0206nobodyさん2009/09/25(金) 00:54:56ID:???
アルバイトや派遣でPHP経験者の希望が多いみたいなんで
PHP経験者になりたいのですが
どんなwebアプリケーションを作れば
PHP経験者として採用されるレベルになれますか?
0207nobodyさん2009/09/25(金) 01:02:08ID:???
>>206
たぶん、経験者を募集している企業の本音は、
「業務で携わったことがある」ことが条件だと思う。
とりあえず、
・サイト画面から入力ができる
・データベースと連携できる
・W3Cチェックを通るHTMLでそれらができる
・環境を作れる(PHPやDBの設定など)
というところは押さえておいたほうがいいかも
0208nobodyさん2009/09/25(金) 01:02:18ID:???
実務経験がないのを経験者とは言わない
0209nobodyさん2009/09/25(金) 09:10:13ID:???
>>207の書き込みから未経験者が回答してることは分かった
経験とはそういう事は言わないんだよ
0210nobodyさん2009/09/25(金) 09:36:06ID:???
>>209
質問者のためにもなるから正答と思えるものを書いたほうがいいよ。

レス批判しあってもしょうがないし
0211nobodyさん2009/09/25(金) 09:46:18ID:???
>>209
どういうことを言うの?
0212nobodyさん2009/09/25(金) 09:56:56ID:???
>>210
批判というより初心者の回答者を正してるだけなのにな



求人での経験ってのは業務で作業したことがある経験の事で趣味での経験ではない
>>207が書いてあるのは経験ではなくてただのスキル
0213nobodyさん2009/09/25(金) 10:03:27ID:???
企業募集の経験者ってのは業務経験者のことだよ。
そうじゃないところはわざわざ経験者とは書かないで、
初心者歓迎や独学でやってる人歓迎みたいな風に書いてあるでしょ。
経験者になりたいのならアルバイトでも経験者になるので、
初心者でアルバイト募集してるとこで下積みするといいよ。
もしかしたらそこから正社員登用されるかもしれないし。
0214nobodyさん2009/09/25(金) 10:14:56ID:???
仕事したことない奴が仁王立ち気分でキーボードかちゃかちゃして回答してるんだなwこのスレ
0215nobodyさん2009/09/25(金) 10:16:17ID:???
お前みたいのよりは幾分まし
0216nobodyさん2009/09/25(金) 10:24:20ID:???
>>215
鏡
0217nobodyさん2009/09/25(金) 10:28:14ID:???
>>216
鏡
0218nobodyさん2009/09/25(金) 12:35:09ID:???
PHPでCGIゲームとか、
WEBゲームとか
ブラウザゲームとか作ってみれば?

あれは基本が全部つまっている。
0219nobodyさん2009/09/25(金) 14:57:24ID:???
PHPでサーバー内のディレクト名を変更する事って出来るのでしょうか?
数百のディレクトリ名を法則にそって変更しないといけないので、手作業でやるにはちょっと時間がかかるので・・・。
0220nobodyさん2009/09/25(金) 15:05:23ID:???
>>219
やったことないから知らないけど
http://jp.php.net/manual/ja/ref.filesystem.php
この中に該当する関数がなさそうなら
exec関数とかを使ってコマンドで操作するしかないんじゃないかな
0221nobodyさん2009/09/25(金) 15:34:35ID:???
普通にrename()でいいんじゃないか?
0222nobodyさん2009/09/25(金) 17:18:49ID:JtFu9Epk
$dir_file = opendir( './' );
while( $file_name = readdir( $dir_file ) ){
echo "$file_name";
}
closedir( $dir_file );

とやっても何も表示されないんですが何か間違ってますか?
0223nobodyさん2009/09/25(金) 17:25:53ID:???
>>222
公式マニュアルに正しいディレクトリの取得方法のコードが載ってるの見た?
02242222009/09/25(金) 17:28:40ID:JtFu9Epk
>>223
すいません。
ttp://php.benscom.com/manual/ja/function.readdir.php
ですかね。
試しにコピペで
if ($handle = opendir('.')) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
echo "$file\n";
}
}
closedir($handle);
貼り付けてみましたが何も表示されませんでした。
0225nobodyさん2009/09/25(金) 17:30:18ID:???
何もファイルが無いんでね?
02262222009/09/25(金) 17:41:49ID:JtFu9Epk
いや・・・ファイルは10個くらい置いてるんですが・・・
opendir.php <- このファイルに224のスクリプトを書いてます
index.php
test.php
up.php
こんな感じで10個ほどあります。一応権限も777にしてみましたがダメでした。
0227nobodyさん2009/09/25(金) 17:50:19ID:???
じゃエラー表示しない設定にしてたら表示するようにするとか
02282262009/09/25(金) 18:10:44ID:JtFu9Epk
>>227
すいません。
特に何もしてないのでエラー表示の設定などはしてないです。
どのようにすれば出るようになるのでしょうか・・・
0229nobodyさん2009/09/25(金) 18:15:40ID:???
じゃ変数の値や関数の返り値を各行で確認してみるとか・・・
0230nobodyさん2009/09/25(金) 18:18:23ID:???
セーフモードおふにしてみろ
02312262009/09/25(金) 18:29:18ID:JtFu9Epk
>>229
試しに
echo "1hoge";
if ($handle = opendir('.')) {
echo "2hoge";
while (false !== ($file = readdir($handle))) {
echo "3hoge";
echo "$file\n";
}
echo "4hoge";
closedir($handle);
}
echo "5hoge";
こういうの書いてみたら1hogeと5hogeのみ表示されました・・・

>>230
php.iniのsafe_modeですよね?Offとなっておりました。

ますます意味が分からない・・・
0232nobodyさん2009/09/25(金) 18:35:16ID:???
いやそれは止まってる場所を調べる方法であって値を調べているわけではないぞ・・・

>path が有効なディレクトリでないかまたは権限が 制限されているかファイルシステムのエラーによりディレクトリが
>オープンできない場合、opendir() は FALSE を返し、 E_WARNING エラーが発行されます。 opendir()
>のこのエラー出力は、 関数名の前に '@' を付けることにより抑制できます。

カレントディレクトリがオープンできない理由てのは俺には分からん。
warningエラー出てるんじゃないの?
var_dump(ini_get('display_errors'));
var_dump(ini_get('error_reporting'));
を実行した際の結果は?
0233nobodyさん2009/09/25(金) 18:45:08ID:???
検索ワードが見つからない場合に、not found的な表示をしたいです。
SQLで検索ワード見つからない場合にnot foundを表示する事自体は分かったので
すが、
それ以降のHTMLの表記を中止する事は可能ですか?

<?php

if ( ○○==0 ) {
echo "not found";
}
?>

<font>TEST</font>
これ以降下にズラ〜〜っとHTMLが続くのですが、それを途中で止めて
not foundだけをページに表示するにはどうすれば良いでしょうか。
0234nobodyさん2009/09/25(金) 18:47:16ID:???
exit
02352262009/09/25(金) 18:47:21ID:JtFu9Epk
>>232
馬鹿な勘違いしててすいませんでした。
実行した結果は
tring(0) "" string(4) "2047"
となっておりました。
0236nobodyさん2009/09/25(金) 18:48:31ID:???
>>233
exit;
すればいいんじゃね。
0237nobodyさん2009/09/25(金) 18:48:53ID:???
>>233
<?php

if ( ○○==0 ) {
echo "not found";
} else {
?>
<font>TEST</font>

ズラ〜〜っと

<?
}
?>

</html>
0238nobodyさん2009/09/25(金) 18:52:04ID:???
>>235
display_errorsが0ってことはエラーが表示されてない設定になってると思うお
php.iniを書き換えればいいお
02392262009/09/25(金) 19:08:16ID:JtFu9Epk
>>238
くだらない質問につきあっていただきありがとうございます。
php.iniを
display_errors = On
error_reporting = E_ALL & ~E_NOTICE
に変更してみましたが、変化は見られませんでした。
変更するところ間違ってるのかな。よく分からなくなってきた。
0240nobodyさん2009/09/25(金) 19:12:18ID:???
>>237
きめえ
0241nobodyさん2009/09/25(金) 19:22:17ID:???
>>239
apache再起動はしたかお?
02422262009/09/25(金) 19:32:14ID:JtFu9Epk
>>241
2回ほど再起動しました。
う〜ん・・・
02432262009/09/25(金) 19:34:04ID:JtFu9Epk
>>241
すいません。
一応サーバごと再起動してみたらうまいこといきました。
ログを見るとどうやらapache様が挙動不審になってたようです。
設定を修正して見れるようになりました。
Webは普通に動いてたのでピンポイントでおかしくなってたようです。
こんなくだらない事にながながとつきあっていただき本当にありがとうございました。
0244sage2009/09/25(金) 20:36:02ID:???
古いファイルを判定して削除したいんですが、なにぶん初心者なもので良い方法を思いつきません。
date("Ymd H:i:s.", filemtime($file))
をwihleで回して更新日を取得する事が出来るようにはなったのですが
これをどのようにすればよいのでしょうか?
ヒントをいただけないでしょうか
0245nobodyさん2009/09/25(金) 20:38:26ID:???
現在の時間とファイルの作成時間の差を取る
その差が、削除したい差以上であれば、削除

てな感じでよくない?
0246nobodyさん2009/09/25(金) 20:40:26ID:???
古いファイルの判定基準が曖昧だな
更新日って一度そのファイルが作成されたら更新はもうされないの?

とりあえず3ヶ月更新なかったものを削除とすると
取得した更新日と現在日時の差で90日分あいていたら
そのファイルにたいしてunlinkかけるとかでいいんでない?
0247sage2009/09/25(金) 20:43:14ID:???
例えば5個ファイルがあったとして新しい3つのファイルを手元に残して
残りの2個は削除したいという意味です。
説明不足申し訳ない。
0248nobodyさん2009/09/25(金) 20:44:07ID:???
更新日時でソートして上から3つのファイル名に対して削除かける

てな感じでよくない?
0249nobodyさん2009/09/25(金) 20:59:34ID:???
>>247
ファイルを作成するときに同時にファイル名を記録するtxtを用意して
それをもとにして削除しな
0250sage2009/09/25(金) 21:18:20ID:???
>>248->>249
while (false !== ($file = readdir($dir))) {
$filetaime[] = date("Ymd H:i:s.", filemtime($file));
$filetime[] = sort($filetime);

unlink($file[$i]);

というのを思いついたのですが、ファイル名と時間が連動してないですね。
きっとアホなことしてると思われてるんでしょうけど、複数の変数を連動させるような事はできますか?
0251nobodyさん2009/09/25(金) 21:26:04ID:???
全部取ってからでないとソートできないっしょが?
02522492009/09/25(金) 21:41:52ID:???
$new_file = "hoge.txt"; //新しいファイル名
touch($new_file); //新しいファイルを作成する
file_put_contents("log.txt", $new_file."\n", FILE_APPEND | LOCK_EX); //新しいファイル名をログファイル(log.txt)に追記
$list = file("log.txt"); //ログを配列に読む
$tmp_log = ""; //新しいログ
for ($i = count($list) - 1; $i >= 0; $i--) { //後ろから回す
 if ($i > 5) {
  unlink($list[$i]); //ファイル削除
 } else {
  $tmp_log .= $list[$i]."\n";
 }
}
file_put_contents("log.txt", $tmp_log, LOCK_EX);

動作確認もしてないし細かいとこが違ってるかもしれんけど
イメージとしてはこんなかんじのことをいった
02532522009/09/25(金) 21:48:57ID:???
追記の仕様を勘違いしてた&for文とif文の条件がめちゃくちゃだったw
眠くて頭が回らない・・・
0254nobodyさん2009/09/25(金) 21:49:56ID:???
途中で送信してしまった
252は忘れてちょうだい・・・
0255nobodyさん2009/09/25(金) 23:10:04ID:???
ISBNコード 書名 価格 出版社
0-0000-0001-2 ガリの穴 25,000円 山田のおばさん

コレをあなたのデータベースに登録してみて下さい
0256nobodyさん2009/09/25(金) 23:22:36ID:???
したよ
0257nobodyさん2009/09/25(金) 23:26:38ID:xPOnPJfW
いつもログファイルに書き込みするときは
fopenしてLOCK_EXしてfputsで書いてLOCK_UNしてfloseしてるんだけど
やっぱりfile_put_contents1行で書いたほうがいいものなんかね?
0258nobodyさん2009/09/25(金) 23:45:05ID:???
いいって何が?
0259nobodyさん2009/09/25(金) 23:45:29ID:???
>>255
俺もしたけど、まさかコレをデータベース登録したおかげでこの俺に彼女が出来る事になったとは・・・
0260nobodyさん2009/09/25(金) 23:46:22ID:???
>>257
ロックされないじゃん
0261sage2009/09/26(土) 00:07:25ID:???
>>260
file_put_contentsでもパイプでLOCK_EXすればいいんじゃないの?
file_put_contents($file, "hogehoge", FILE_APPEND | LOCK_EX);
こんな感じ。
0262nobodyさん2009/09/26(土) 00:21:08ID:???
パイプて
0263sage2009/09/26(土) 00:24:43ID:???
これはロックされているのか?
0264nobodyさん2009/09/26(土) 00:39:16ID:???
>>261
> FILE_APPEND | LOCK_EX
これは有効なのか?

マニュアルを見ると、

フラグを組み合わせる際には、論理 OR (|) 演算子で連結します。
FILE_APPENDはLOCK_EX と同時には使用できません。

と読めるのだが...。

「追記はアトミックに行われるためロックは不要」とあるので、
FILE_APPENDの指定だけでログ追記するのに問題はなさそうではあるが。
0265sage2009/09/26(土) 00:50:03ID:???
横からで悪いがロックしなくても同時書き込みが発生しても大丈夫ということか?
0266nobodyさん2009/09/26(土) 01:35:35ID:???
>>265
アトミック(=不可分の)とあるので、一連の操作が邪魔されることがないということなんだろうね。
マニュアルを信じるならば。

古い版のマニュアルでは、
file_put_contents($file, $person, FILE_APPEND | LOCK_EX);
という例が載っているが、
http://bugs.php.net/bug.php?id=49329
で修正されたようだ。
0267sage2009/09/26(土) 01:40:05ID:???
マニュアルを信じるならfopenでわざわざLOCKとか使わなくても
file_put_contentsの1行で済むというわけか。
0268nobodyさん2009/09/26(土) 01:42:11ID:???
FILE_APPENDの場合についてはそのように読めるな。
0269nobodyさん2009/09/26(土) 05:54:34ID:???
php でバッチやるならタイムアウトにならないように注意ね
0270nobodyさん2009/09/26(土) 17:49:56ID:???
PHPでは、
配列ってシングルクオート入れないと、
正式にはダメみたいだね。
0271nobodyさん2009/09/26(土) 18:27:03ID:???
配列に入れる?
正式?
0272nobodyさん2009/09/26(土) 18:36:08ID:???
anArray['keyString'] の話か?
0273nobodyさん2009/09/26(土) 18:45:59ID:???
>>272
それそれ

シングルクオート抜いたら、
Noticeが出やがる。
0274nobodyさん2009/09/26(土) 19:13:58ID:???
何を今更感てんこもりだな・・・
■ このスレッドは過去ログ倉庫に格納されています