Messagesheadersalreadysent

headersalreadysent  时间:2021-04-12  阅读:()
PHPSolutionsDynamicWebDesignMadeEasyThirdEditionDavidPowersPHPSolutions:DynamicWebDesignMadeEasy,ThirdEditionCopyright2014byDavidPowersThisworkissubjecttocopyright.
AllrightsarereservedbythePublisher,whetherthewholeorpartofthematerialisconcerned,specificallytherightsoftranslation,reprinting,reuseofillustrations,recitation,broadcasting,reproductiononmicrofilmsorinanyotherphysicalway,andtransmissionorinformationstorageandretrieval,electronicadaptation,computersoftware,orbysimilarordissimilarmethodologynowknownorhereafterdeveloped.
Exemptedfromthislegalreservationarebriefexcerptsinconnectionwithreviewsorscholarlyanalysisormaterialsuppliedspecificallyforthepurposeofbeingenteredandexecutedonacomputersystem,forexclusiveusebythepurchaserofthework.
DuplicationofthispublicationorpartsthereofispermittedonlyundertheprovisionsoftheCopyrightLawofthePublisher'slocation,initscurrentversion,andpermissionforusemustalwaysbeobtainedfromSpringer.
PermissionsforusemaybeobtainedthroughRightsLinkattheCopyrightClearanceCenter.
ViolationsareliabletoprosecutionundertherespectiveCopyrightLaw.
ISBN-13(pbk):978-1-4842-0636-2ISBN-13(electronic):978-1-4842-0635-5Trademarkednames,logos,andimagesmayappearinthisbook.
Ratherthanuseatrademarksymbolwitheveryoccurrenceofatrademarkedname,logo,orimageweusethenames,logos,andimagesonlyinaneditorialfashionandtothebenefitofthetrademarkowner,withnointentionofinfringementofthetrademark.
Theuseinthispublicationoftradenames,trademarks,servicemarks,andsimilarterms,eveniftheyarenotidentifiedassuch,isnottobetakenasanexpressionofopinionastowhetherornottheyaresubjecttoproprietaryrights.
Whiletheadviceandinformationinthisbookarebelievedtobetrueandaccurateatthedateofpublication,neithertheauthorsnortheeditorsnorthepublishercanacceptanylegalresponsibilityforanyerrorsoromissionsthatmaybemade.
Thepublishermakesnowarranty,expressorimplied,withrespecttothematerialcontainedherein.
ManagingDirector:WelmoedSpahrLeadEditor:BenRenow-ClarkeTechnicalReviewer:PaulMilbourneEditorialBoard:SteveAnglin,MarkBeckner,EwanBuckingham,GaryCornell,LouiseCorrigan,JimDeWolf,JonathanGennick,RobertHutchinson,MichelleLowman,JamesMarkham,MatthewMoodie,JeffOlson,JeffreyPepper,DouglasPundick,BenRenow-Clarke,DominicShakeshaft,GwenanSpearing,MattWade,SteveWeissCoordinatingEditor:ChristineRickettsCopyEditor:AprilRondeauCompositor:SPiGlobalIndexer:SPiGlobalArtist:SPiGlobalCoverDesigner:AnnaIshchenkoDistributedtothebooktradeworldwidebySpringerScience+BusinessMediaNewYork,233SpringStreet,6thFloor,NewYork,NY10013.
Phone1-800-SPRINGER,fax(201)348-4505,e-mailorders-ny@springer-sbm.
com,orvisitwww.
springeronline.
com.
ApressMedia,LLCisaCaliforniaLLCandthesolemember(owner)isSpringerScience+BusinessMediaFinanceInc(SSBMFinanceInc).
SSBMFinanceIncisaDelawarecorporation.
Forinformationontranslations,pleasee-mailrights@apress.
com,orvisitwww.
apress.
com.
ApressandfriendsofEDbooksmaybepurchasedinbulkforacademic,corporate,orpromotionaluse.
eBookversionsandlicensesarealsoavailableformosttitles.
Formoreinformation,referenceourSpecialBulkSales–eBookLicensingwebpageatwww.
apress.
com/bulk-sales.
Anysourcecodeorothersupplementarymaterialreferencedbytheauthorinthistextisavailabletoreadersatwww.
apress.
com.
Fordetailedinformationabouthowtolocateyourbook'ssourcecode,gotowww.
apress.
com/source-code.
iiiContentsataGlanceAbouttheAuthorxvAbouttheTechnicalReviewerxviiAcknowledgmentsxixIntroductionxxiChapter1:WhatIsPHP—AndWhyShouldICare1Chapter2:GettingReadytoWorkwithPHP7Chapter3:HowtoWritePHPScripts19Chapter4:LighteningYourWorkloadwithIncludes63Chapter5:BringingFormstoLife97Chapter6:UploadingFiles133Chapter7:UsingPHPtoManageFiles173Chapter8:GeneratingThumbnailImages207Chapter9:PagesThatRemember:SimpleLoginandMultipageForms235Chapter10:GettingStartedwithaDatabase273Chapter11:ConnectingtoaDatabasewithPHPandSQL299Chapter12:CreatingaDynamicPhotoGallery337Chapter13:ManagingContent357Chapter14:FormattingTextandDates383ContentsataGlanceivChapter15:PullingDatafromMultipleTables417Chapter16:ManagingMultipleDatabaseTables435Chapter17:AuthenticatingUserswithaDatabase465Index479vContentsAbouttheAuthorxvAbouttheTechnicalReviewerxviiAcknowledgmentsxixIntroductionxxiChapter1:WhatIsPHP—AndWhyShouldICare1HowPHPHasGrown1HowPHPMakesPagesDynamic2CreatingPagesThatThinkforThemselves3HowHardIsPHPtoUseandLearn4CanIJustCopyandPastetheCode5HowSafeIsPHP5WhatSoftwareDoINeedtoWritePHP5WhattoLookforWhenChoosingaPHPEditor5So,Let'sGetonwithIt6Chapter2:GettingReadytoWorkwithPHP7CheckingWhetherYourWebsiteSupportsPHP7DecidingWheretoTestYourPages8WhatYouNeedforaLocalTestEnvironment9IndividualProgramsoranAll-in-onePackage9SettingUponWindows10GettingWindowstoDisplayFilenameExtensions10ChoosingaWebServer10InstallinganAll-in-onePackageonWindows10ContentsviSettingUponMacOSX11InstallingMAMP11TestingandconfiguringMAMP11WheretoLocateYourPHPFiles(Windows&Mac)13UsingVirtualHosts14CheckingYourPHPSettings14DisplayingtheServerConfigurationwithphpinfo(14Editingphp.
ini16What'sNext18Chapter3:HowtoWritePHPScripts19PHP:TheBigPicture19TellingtheServertoProcessPHP20EmbeddingPHPinaWebpage20StoringPHPinanExternalFile21UsingVariablestoRepresentChangingValues21EndingCommandsWithaSemicolon24CommentingScripts24UsingArraystoStoreMultipleValues25PHP'sBuilt-inSuperglobalArrays26UnderstandingWhentoUseQuotes27MakingDecisions29MakingComparisons31UsingIndentingandWhitespaceforClarity32UsingLoopsforRepetitiveTasks32UsingFunctionsforPresetTasks32UnderstandingPHPClassesandObjects33DisplayingPHPOutput34UnderstandingPHPErrorMessages36PHP:AQuickReference38UsingPHPinanExistingWebsite38DataTypesinPHP39ContentsviiDoingCalculationswithPHP40Addingtoanexistingstring42AllYouEverWantedtoKnowAboutQuotes—andMore42CreatingArrays46TheTruthAccordingtoPHP50CreatingLoops54ModularizingCodewithFunctions57CreatingNewVariablesDynamically61PHPQuickChecklist62Chapter4:LighteningYourWorkloadwithIncludes63IncludingCodefromExternalFiles64IntroducingthePHPIncludeCommands64WherePHPLooksforIncludeFiles65ChoosingtheRightFilenameExtensionforIncludes68CreatingPageswithChangingContent77PreventingErrorswithIncludeFiles85SuppressingErrorMessagesonaLiveWebsite86ChoosingwheretoLocateyourIncludeFiles91Adjustingyourinclude_path91Whycan'tIUseSite-root-relativeLinkswithPHPIncludes93SecurityConsiderationswithIncludes95ChapterReview95Chapter5:BringingFormstoLife97HowPHPGathersInformationfromaForm97UnderstandingtheDifferenceBetweenPostandget99GettingformDatawithPHPSuperglobals102ProcessingandValidatingUserInput102CreatingaReusableScript102PreservingUserInputwhenaFormisIncomplete108FilteringOutPotentialAttacks110ContentsviiiSendingEmail113UsingAdditionalEmailHeadersSafely114HandlingMultiple-ChoiceFormElements122ChapterReview131Chapter6:UploadingFiles133HowPHPHandlesFileUploads133Checkingwhetheryourserversupportsuploads134Addingafileuploadfieldtoaform135Understandingthe$_FILESarray135Establishinganuploaddirectory138UploadingFiles139Movingthetemporaryfiletotheuploadfolder139CreatingaPHPFileUploadClass143DefiningaPHPclass143Checkinguploaderrors150Changingprotectedproperties154Explicitlychangingadatatype158Neutralizingpotentiallydangerousfiles159Preventingfilesfrombeingoverwritten163UploadingMultipleFiles166Howthe$_FILESarrayhandlesmultiplefiles166UsingtheUploadClass170PointstoWatchwithFileUploads171ChapterReview171Chapter7:UsingPHPtoManageFiles173CheckingthatPHPCanOpenaFile173ConfigurationSettingsthatAffectFileAccess174CreatingaFileStorageFolderforLocalTesting174ContentsixReadingandWritingFiles174ReadingFilesinaSingleOperation175OpeningandClosingFilesforRead/WriteOperations179ExploringtheFileSystem188InspectingaFolderwithScandir(188InspectingtheContentsofaFolderwithFilesystemIterator188RestrictingFileTypeswiththeRegexIterator191AccessingRemoteFiles196ConsumingNewsandOtherRSSFeeds196UsingSimpleXML197CreatingaDownloadLink203PHPSolution7-6:PromptingaUsertoDownloadanImage203ChapterReview205Chapter8:GeneratingThumbnailImages207CheckingYourServer'sCapabilities207ManipulatingImagesDynamically208MakingaSmallerCopyofanImage209ResizinganImageAutomaticallyonUpload226ExtendingaClass226UsingtheThumbnailUploadClass233ChapterReview233Chapter9:PagesThatRemember:SimpleLoginandMultipageForms235WhatSessionsAreandHowTheyWork235CreatingPHPSessions238CreatingandDestroyingSessionVariables238DestroyingaSession239RegeneratingtheSessionID239The"HeadersAlreadySent"Error239ContentsxUsingSessionstoRestrictAccess240PHPSolution9-1:ASimpleSessionExample240UsingFile-basedAuthentication244MakingPasswordsMoreSecure251PHPSolution9-6:CreatingaPassword-strengthChecker252SettingaTimeLimitonSessions264PHPSolution9-9:EndingaSessionafteraPeriodofInactivity265PassingInformationThroughMultipageForms267ChapterReview272Chapter10:GettingStartedwithaDatabase273WhichDatabaseShouldYouChoose273CompatibilityofMariaDBandMySQL274HowaDatabaseStoresInformation274Howprimarykeyswork275Linkingtableswithprimaryandforeignkeys276Breakingdowninformationintosmallchunks277Checkpointsforgooddatabasedesign278UsingaGraphicalInterface278LaunchingphpMyAdmin280SettingUpthephpsolsDatabase280MySQLnamingrules280UsingphpMyAdmintocreateanewdatabase281Creatingdatabase-specificuseraccounts282Creatingadatabasetable285Insertingrecordsintoatable287CreatinganSQLfileforbackupanddatatransfer291ChoosingtheRightDataTypeinMySQL295Storingtext295Storingnumbers295ContentsxiStoringdatesandtimes296Storingpredefinedlists296Storingbinarydata297ChapterReview297Chapter11:ConnectingtoaDatabasewithPHPandSQL299CheckingYourRemoteServerSetup299HowPHPCommunicateswithaDatabase301ConnectingwiththeMySQLImprovedextension302ConnectingwithPDO302PHPSolution11-1:Makingareusabledatabaseconnector303Queryingthedatabaseanddisplayingtheresults306UsingSQLtoInteractwithaDatabase313WritingSQLqueries313RefiningthedataretrievedbyaSELECTquery314UnderstandingtheDangerofSQLInjection318UsingPreparedStatementsforUserInput324EmbeddingvariablesinMySQLipreparedstatements325EmbeddingvariablesinPDOpreparedstatements329ChapterReview335Chapter12:CreatingaDynamicPhotoGallery337WhyNotStoreImagesinaDatabase338PlanningtheGallery338ConvertingtheGalleryElementstoPHP340BuildingtheDynamicElements343PassingInformationThroughaQueryString343CreatingaMulticolumntable347PagingThroughaLongsetofRecords349ChapterReview356ContentsxiiChapter13:ManagingContent357SettingUpaContentManagementSystem357CreatingtheBlogDatabaseTable358CreatingtheBasicInsertandUpdateForm359InsertingNewRecords360LinkingtotheUpdateandDeletePages365UpdatingRecords368DeletingRecords376ReviewingtheFourEssentialSQLCommands378SELECT378INSERT380UPDATE380DELETE381SecurityandErrorMessages381ChapterReview381Chapter14:FormattingTextandDates383DisplayingaTextExtract383ExtractingaFixedNumberofCharacters383EndinganExtractonaCompleteWord385ExtractingtheFirstParagraph385DisplayingParagraphs386ExtractingCompleteSentences387Let'sMakeaDate390HowMySQLHandlesDates390InsertingDatesintoMySQL394WorkingwithDatesinPHP400ChapterReview415ContentsxiiiChapter15:PullingDatafromMultipleTables417UnderstandingTableRelationships417LinkinganImagetoanArticle419AlteringtheStructureofanExistingTable419InsertingaForeignKeyinaTable421SelectingRecordsfromMultipleTables427FindingRecordsthatdon'thaveaMatchingForeignKey432CreatinganIntelligentLink433ChapterReview434Chapter16:ManagingMultipleDatabaseTables435MaintainingReferentialIntegrity435Supportforforeign-keyconstraints436Insertingrecordsintomultipletables439Creatingacross-referencetable441Gettingthefilenameofanuploadedimage442Adaptingtheinsertformtodealwithmultipletables443UpdatingandDeletingRecordsinMultipleTables454Updatingrecordsinacross-referencetable454Preservingreferentialintegrityondeletion457Creatingdeletescriptswithforeign-keyconstraints461Creatingdeletescriptswithoutforeign-keyconstraints462ChapterReview463Chapter17:AuthenticatingUserswithaDatabase465ChoosinganEncryptionMethod465UsingOne-WayEncryption466CreatingaTabletoStoreUsers'Details466RegisteringNewUsersintheDatabase466ContentsxivUsingTwo-WayEncryption473Creatingthetabletostoreusers'details474Registeringnewusers474Userauthenticationwithtwo-wayencryption475Decryptingapassword477UpdatingUserDetails477WhereNext477Index479xvAbouttheAuthorDavidPowersistheauthorofaseriesofhighlysuccessfulbooksandvideotrainingcoursesonwebdevelopment,withaparticularemphasisonPHPandwebstandards,includingIntroducingPHPandPHPCodeClinicinthelynda.
comOnlineTrainingLibrary.
Asaprofessionalwriter,hehasbeeninvolvedinelectronicmediaformorethan40years,firstwithBBCradioandtelevisionandmorerecentlywiththeInternet.
HisclearwritingstyleisvaluednotonlyintheEnglish-speakingworld,asseveralofhisbookshavebeentranslatedintoSpanish,Polish,Chinese,andotherlanguages.
Whatstartedasamildinterestincomputingwastransformedalmostovernightintoapassion,whenDavidwaspostedtoJapanin1987asBBCcorrespondentinTokyo.
WithnocorporateITdepartmentjustdownthehallway,hewasforcedtolearnhowtofixeverythinghimself.
Whennottinkeringwiththeinnardsofhiscomputer,hewasreportingforBBCtelevisionandradioontheriseandcollapseoftheJapanesebubbleeconomy.
SinceleavingtheBBCtoworkindependently,hehasworkedonmanyprojects,includingthedevelopmentofanonlinebilingualdatabaseofeconomicandpoliticalanalysisforJapaneseclientsofaninternationalconsultancy.
HealsoteachesapostgraduateWebMediacourseatOxfordBrookesUniversity.
WhennotpoundingthekeyboardwritingbooksordreamingofnewwaysofusingPHPandotherprogramminglanguages,Davidenjoysnothingbetterthanvisitinghisfavoritesushirestaurant.
HehastranslatedseveralplaysfromJapanese.
xviiAbouttheTechnicalReviewerPaulMilbournehasbeenasoftwaredeveloperintheWashington–Baltimoremetropolitanareaforoverdecade.
HisjourneyhasallowedhimtoworkwithsuchclientsastheWashingtonRedskins,BaltimoreRavens,ZyngaGames,andmanyothers.
Forthemostpart,Paulhasmadeahandsomecareerputtingoutfiresanddealingwithedgecases.
Thisexperiencehasexposedhimtomostaspectsofdevelopmentthroughamultitudeofindustriesandplatforms.
Paulisalsoaformerchef,anavidmusician,andapracticingfineartist.
xixAcknowledgmentsTheoriginalideatowritePHPSolutionscamefromChrisMills,myeditorformanyyearsatApress/friendsofED,who'snowaSeniorTechnicalWriteratMozillaCorporationandapassionateadvocateofwebstandards.
Chriswantedtomoveawayfromthecookbookformulaofisolatedsolutionsthatleftthereaderwithlittleornoideaaboutthepracticaluseofaparticulartechnique.
Thefactthatthisbookisnowinitsthirdeditionproveswhatagreatideaitwas.
Thanks,Chris.
Chris'ssuccessoraseditorofthesecondandthirdeditions,BenRenow-Clarke,followedhisexamplebygivingmefreereintoshapethebookaccordingtomyownideas,butalwaysputtinghimselfinthepositionofthereader,nudgingmeintherightdirectionwhenanexplanationwasn'tclearenoughorachapterwasbadlyorganized.
I'malsogratefultomytechnicalreviewers:SamuelWrightforthefirstedition,KristianBesleyandJasonNadonforthesecondedition,andPaulMilbourneforthisedition.
Eacheditionhasbuiltonthepreviousone,soideasandsuggestionsmadebyreviewersofpreviouseditionsliveoninthisone.
ProducingabooklikethiswouldbeimpossiblewithoutthediligenthelpofeveryoneintheproductionchainatApress.
Mythanksgotothemall.
Mostofall,mythanksgotothereaderswhohavemadethisbooksuchasuccess.
Welcometotheclub.
IhopeyouenjoythisbookandfinditusefulinbuildingdynamicwebsiteswithPHP.
xxiIntroductionWhenthefirsteditionofPHPSolutionswaspublished,Iwasconcernedthatthesubtitle,DynamicWebDesignMadeEasy,soundedoverambitious.
Evenwiththisthirdedition,itstillmakesmealittleapprehensiveaboutundulyraisingreaders'expectations.
PHPisnotdifficult,butnorisitlikeaninstantcakemix:justaddwaterandstir.
Everywebsiteisdifferent,soit'simpossibletograbascript,pasteitintoawebpage,andexpectittowork.
Myaimwastohelpwebdesignerswithlittleornoknowledgeofprogramminggaintheconfidencetodiveintothecodeandadjustittotheirownrequirements.
Thefactthatthebookhasremainedsopopularsinceitwasfirstpublishedin2006suggeststhatmanyreaderstookupthechallenge.
MembersofBostonPHPdidsoinlargenumberswhentheyadoptedthesecondeditionasthetextforthreeseriesofPHPPercolate,avirtualself-studygroupforbeginners.
Hundredssigneduptostudythebookonechapteraweek.
Itworkedforthem,soIhopeitwillworkjustaswellforyou.
What'sNewinthisEditionOneusefulpieceoffeedbackfromPHPPercolateparticipantsandotherreaderswasdisappointmentwhenIglossedoverasectionofadvancedcode,explainingonlywhatitdidratherthanhowitworked.
Thatomissionhasbeencorrectedinthisedition.
Occasionally,Ipointoutthatyoumightwanttoskipthedetailedexplanation,butit'sthereifyou'reintriguedbyhowatechniqueworks.
Asaresult,thereferencesectionofChapter3hasbeenexpandedtoincludesuchesotericdelightsasvariablevariables.
No,it'snotatypo;"variablevariable"isagenuineconceptinPHP.
It'salsoquiteuseful.
ThiseditionbringsthecontentuptodatewithPHP5.
6,whichwasreleasedinAugust2014.
BecausehostingcompaniesareoftenslowtoupgradetheversionofPHPthattheyoffer,I'vemadePHP5.
4theminimumversionforthecodeusedinthisbook.
PHP5.
4madesomeimportantchanges,introducingasimplifiedarraysyntaxanddroppingsupportforsafemodeand"magicquotes.
"Aswellasbringingthecodeuptodate,I'verevisedeverychapter,goingthroughitlinebyline,clarifyingexplanations.
I'vealsoeliminatedanumberoferrors—without,Ihope,introducingnewones.
ThebiggestchangesaretothecustomclassesforuploadingfilesandcreatingimagethumbnailsinChapters6and8.
Theynowusenamespacestoavoidnamingclasheswithotherthird-partycode.
Moreimportant,theclassdefinitionshavebeenextensivelyrewrittentomakethemmoreefficient.
AnothersignificantchangeistheuseofthenewpasswordhashingfunctionsinChapters9and17.
Thesefunctionsweren'tintroduceduntilPHP5.
5,butyoucanemulatetheminPHP5.
4byincludingthepassword_compatlibraryinyourscripts.
Detailsofhowtoobtainthelibrary,whichconsistsofasinglefile,canbefoundinChapter9.
Thechaptersonworkingwithadatabasehavebeenreorganizedtomakethemeasiertofollow.
I'vealsostrengthenedtheexplanationofpreparedstatements,usingbothMySQLImproved(MySQLi)andthedatabase-neutralPHPDataObjects(PDO).
SomeLinuxdistributionsnowinstallMariaDBasadrop-inreplacementforMySQL.
Toavoidunnecessaryrepetition,InormallyreferonlytoMySQL,butallthePHPsolutionsinthisbookworkequallywellwithMariaDB.
IntroductionxxiiHowThisBookIsOrganizedEachchaptertakesyouthroughaseriesofstagesinasingleproject,witheachstagebuildingonthepreviousone.
Byworkingthrougheachchapter,yougetthefullpictureofhoweverythingfitstogether.
Youcanlaterrefertotheindividualstagestorefreshyourmemoryaboutaparticulartechnique.
Althoughthisisn'tareferencebook,Chapter3isaprimeronPHPsyntax,andsomechapterscontainshortreferencesections—notablyChapter7(readingfromandwritingtofiles),Chapter9(sessions),Chapter10(datatypesinMySQL/MariaDB),Chapter11(PHPpreparedstatements),Chapter13(thefouressentialSQLcommands),andChapter14(workingwithdatesandtimes).
So,howeasyiseasyIhavedonemybesttoeaseyourpath,butthereisnomagicpotion.
Itrequiressomeeffortonyourpart.
Don'tattempttodoeverythingatonce.
Adddynamicfeaturestoyoursiteafewatatime.
Gettounderstandhowtheywork,andyoureffortswillbeamplyrewarded.
AddingPHPandMySQL/MariaDBtoyourskillswillenableyoutobuildwebsitesthatoffermuchrichercontentandaninteractiveuserexperience.
UsingtheExampleFilesAllthefilesnecessaryforworkingthroughthisbookcanbedownloadedfromtheApresswebsiteatwww.
apress.
com/9781484206362.
MakesureyouselectthedownloadlinkforPHPSolutions:DynamicWebDesignMadeEasy,ThirdEdition.
Thecodeisdifferentfromthefirsttwoeditions.
SetupaPHPdevelopmentenvironment,asdescribedinChapter2.
Unzipthefilesandcopythephpsolsfolderandallitscontentsintoyourwebserver'sdocumentroot.
Thecodeforeachchapterisinafoldernamedafterthechapter:ch01,ch02,andsoon.
FollowtheinstructionsineachPHPsolution,andcopytherelevantfilestothesiterootortheworkfolderindicated.
Whereapageundergoesseveralchangesduringachapter,Ihavenumberedthedifferentversionslikethis:index_01.
php,index_02.
php,andsoon.
Whencopyingafilethathasanumber,removetheunderscoreandnumberfromthefilename,soindex_01.
phpbecomesindex.
php.
IfyouareusingaprogramlikeDreamweaverthatpromptsyoutoupdatelinkswhenmovingfilesfromonefoldertoanother,donotupdatethem.
Thelinksinthefilesaredesignedtopickuptherightimagesandstylesheetswhenlocatedinthetargetfolder.
Ihavedonethissoyoucanuseafilecomparisonutilitytocheckyourfilesagainstmine.
Ifyoudon'thaveafilecomparisonutility,Istronglyurgeyoutoinstallone.
Itwillsaveyouhoursofheadscratchingwhentryingtospotthedifferencebetweenyourversionandmine.
Amissingsemicolonormistypedvariablecanbehardtospotindozensoflinesofcode.
WindowsuserscandownloadWinMergeforfreefromhttp://winmerge.
org/.
IuseBeyondCompare(www.
scootersoftware.
com),whichisnowavailableforWindows,MacOSX,andLinux.
It'snotfreebutisexcellentandreasonablypriced.
BBEditonaMacincludesafilecomparisonutility.
Alternatively,usethefilecomparisonfeatureinTextWrangler,whichcanbedownloadedfreefromwww.
barebones.
com/products/textwrangler/.
LayoutConventionsTokeepthisbookasclearandeasytofollowaspossible,thefollowingtextconventionsareusedthroughout:Importantwordsorconceptsarenormallyhighlightedonthefirstappearanceinboldtype.
Codeispresentedinfixed-widthfont.
Neworchangedcodeisnormallypresentedinboldfixed-widthfont.
Pseudo-codeandvariableinputarewritteninitalicfixed-widthfont.
MenucommandsarewrittenintheformMenuSubmenuSubmenu.
WhereIwanttodrawyourattentiontosomething,I'vehighlightedit,likethis:Ahem,don'tsayIdidn'twarnyou.

BlueHost 周年庆典 - 美国/香港虚拟主机 美国SSD VPS低至月32元

我们对于BlueHost主机商还是比较熟悉的,早年我们还是全民使用虚拟主机的时候,大部分的外贸主机都会用到BlueHost无限虚拟主机方案,那时候他们商家只有一款虚拟主机方案。目前,商家国际款和国内款是有差异营销的,BlueHost国内有提供香港、美国、印度和欧洲机房。包括有提供虚拟主机、VPS和独立服务器。现在,BlueHost 商家周年活动,全场五折优惠。我们看看这次的活动有哪些值得选择的。 ...

Puaex:香港vds,wtt套餐,G口带宽不限流量;可解流媒体,限量补货

puaex怎么样?puaex是一家去年成立的国人商家,本站也分享过几次,他家主要销售香港商宽的套餐,给的全部为G口带宽,而且是不限流量的,目前有WTT和HKBN两种线路的方面,虽然商家的价格比较贵,但是每次补一些货,就会被抢空,之前一直都是断货的状态,目前商家进行了补货,有需要这种类型机器的朋友可以入手。点击进入:puaex商家官方网站Puaex香港vds套餐:全部为KVM虚拟架构,G口的带宽,可...

TMThosting:VPS月付55折起,独立服务器9折,西雅图机房,支持支付宝

TMThosting发布了今年黑色星期五的促销活动,即日起到12月6日,VPS主机最低55折起,独立服务器9折起,开设在西雅图机房。这是一家成立于2018年的国外主机商,主要提供VPS和独立服务器租用业务,数据中心包括美国西雅图和达拉斯,其中VPS基于KVM架构,都有提供免费的DDoS保护,支持选择Windows或者Linux操作系统。Budget HDD系列架构CPU内存硬盘流量系统价格单核51...

headersalreadysent为你推荐
深圳routeTD-SCDMAsnsdestoondestoon多少人是从PHP168过来的啊?Destoon的B2B很好,强烈支持你们空间文章问问你知道我的空间有几篇文章啊?支付宝调整还款日花呗调整还款日算延期吗?字节跳动回应TikTok易主互动百科被字节跳动收购意味着什么?申请支付宝账户如何申请支付宝账户360免费建站聚企360建站是免费的?爱优网为什么优酷土豆等视频网站那么多人上传视频申请400电话电话是什么电话啊?怎么申请400电话400呢?具体收费价格是什么?
大庆服务器租用 看国外视频直播vps 免费二级域名申请 注册cn域名 godaddy支付宝 gateone 英语简历模板word 网站保姆 回程路由 ssh帐号 国外php空间 魔兽世界台湾服务器 河南服务器 权嘉云 个人域名 免费智能解析 酷番云 绍兴电信 卡巴斯基破解版 免费dns解析 更多